問題描述:
在 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