不同主機間的 docker 網絡互通


背景:
兩台服務器主機分別是:192.168.0.111,192.168.0.114
192.168.0.111 服務器上運行了兩個docker鏡像,分別是:rocketmq、consul
192.168.0.114 服務器上運行了三個后台服務的docker鏡像,分別是uip-uadmin、uip-pangu、uip-gateway

問題:
現在需要將三個后台服務注冊到consul上,發現一直注冊不上去。

解決方案
通過已經跑起來的docker鏡像,查看服務器給docker容器分配的網段:
在192.168.0.111上執行:

docker inspect rocketmq

可以看到輸出內容含:(gateway的網段地址為172.17.0)

"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "cfdffdfaed734aef5a0a06c8400ffd45bac828655468039419d780ab43ba9ead",
"EndpointID": "6bc9f0b9d1695c9e39c5568efffcfbd98a1194b5c8bcc2ca1de54690aa58a295",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 24,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:01:02",
"DriverOpts": null
}
}

由此可知,111服務器給docker容器分配的網段是:172.17.0
同理可知,114服務器給docker容器分配的網段也是:172.17.0
需要修改其中一個服務器的docker容器網段,使不一致。因為111服務器上跑的docker容器比較少,所以我們將111服務器上的docker容器網段指定為:172.17.1
在192.168.0.111服務器的/etc/docker下建立文件daemon.json,輸入以下內容進行網段指定:

{"bip":"172.17.1.1/24"}

daemon.json 整體內容:

[root@localhost docker]# cat daemon.json 
{"bip":"172.17.1.1/24"}

在192.168.0.111服務器上添加網段路由:

ip route add 172.17.0.0/24 via 192.168.0.114

重啟 docker

systemctl restart docker

重啟rocketmq、consul

docker restart rocketmq
docker restart consul

再次查看服務器給docker容器分配的網段:
在192.168.0.111上執行:

docker inspect rocketmq

可以看到輸出內容含:(gateway的網段地址已經變成172.17.1了)

"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "cfdffdfaed734aef5a0a06c8400ffd45bac828655468039419d780ab43ba9ead",
"EndpointID": "6bc9f0b9d1695c9e39c5568efffcfbd98a1194b5c8bcc2ca1de54690aa58a295",
"Gateway": "172.17.1.1",
"IPAddress": "172.17.1.2",
"IPPrefixLen": 24,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:01:02",
"DriverOpts": null
}
}

然后將114服務器上的三個docker容器進行重啟,就能在consul控制台上看到服務正常注冊上去了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM