最近在学习docker的相关内容,本身是linux小白,原来上课学习过docker的部署,但已经是一年前的事了。
最近学习的时候,遇到了问题,看着视频部署了docker,安装了mysql,给mysql分配了自定义网络。原本能够在我的主机idea自带的数据库中连接到dockers中的mysql的,但是,我重启了电脑之后,一切都变了。
显示连接超时,这时候我就开始产生误解了,因为主机重启了,那么虚拟机自然也是重启了,虚拟机重启就会导致虚拟机中en33分配的ip出现变更,从而导致mysql 的url中ip地址出现偏差,从而出现连接错误。
但是我当时学艺不精,认为是直接连接docker中mysql的ip+3306端口。
发现无法连接,以为是重启导致的docker部署问题,又将network和mysql装了卸卸了装,无法解决。
最后发现是en33 对应的虚拟机ip地址出现了问题。
总结,对docker理解有问题,连接docker内部的mysql时,外部主机是无法主动访问容器内部的。想要访问容器内部,必须通过虚拟机,让虚拟机来进行自动映射。
比如:
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
-v /opt/mysql/data:/var/lib/mysql \
mysql
这段代码的 -p 3306:3306实际上就是进行端口映射,外部主机通过en33的ip来访问虚拟机,虚拟机得到3306端口号,从而去访问端口号为3306的容器,这样来建立连接的。具体图示如下: