docker中两个容器ping不通的情况
问题描述:
在 Docker容器遇到这样一个问题,在Hive中所在的容器,访问 Mysql所在的容器时,ping不通,两个容器的 ip地址分别为:
- Hive容器:172.18.0.2
- Mysql容器:172.17.0.2
可见,这是两个网段的 ip(172.18 和 172.17),所以导致互相 ping不通。
解决办法:(参考:Docker中在不同网段下的容器的互联)
查看 docker容器的网络列表:
(base) luochao7@ZBMac-C02FQBKRM ~ % docker network ls
如上图所示,有 bridge、hadoop、host、none 这4个网络,其中:bridge 是docker里默认的桥接模式 ,host是docker里默认的仅主机模式,none是docker里的NAT模式,而 hadoop是我在安装 Hadoop时单独开的一个网络。
- 查看 bridge网络:
可见,bridge网络下面的容器有 mysql容器。
- 将 mysql 容器加入到 hadoop网络中:
docker network connect hadoop mysql
- 然后再查看 hadoop网络:
可见,在 hadoop网络中,就有 mysql容器了,并且给mysql容器分配了一个此网络的 ip地址:172.18.0.3
在Mysql容器中,查看 ip: ifconfig | grep inet
可见,就有 2个 ip地址了。
此时,再 ping Mysql所在容器的新 ip,即:172.18.0.3,就能 ping 通了。
注: 新的 ip仅仅对 hadoop网络下的容器有用,相当于给 mysql在 hadoop网络中,分配了一个别名,但是他真实的名字 (ip),还是 172.17.0.2