您好,登錄后才能下訂單哦!
如何理解Docker容器之間的連通性,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
今天我們將討論這幾個容器之間的連通性。
兩個 busybox 容器都掛在 my_net2 上,應該能夠互通,我們驗證一下
可見同一網(wǎng)絡中的容器、網(wǎng)關之間都是可以通信的。
my_net2
與默認 bridge 網(wǎng)絡能通信嗎?
從拓撲圖可知,兩個網(wǎng)絡屬于不同的網(wǎng)橋,應該不能通信,我們通過實驗驗證一下,讓 busybox 容器 ping httpd 容器。
確實 ping 不通,符合預期。
“等等!不同的網(wǎng)絡如果加上路由應該就可以通信了吧?”我已經(jīng)聽到有讀者在建議了。
這是一個非常非常好的想法。
確實,如果 host 上對每個網(wǎng)絡的都有一條路由,同時操作系統(tǒng)上打開了 ip forwarding,host 就成了一個路由器,掛接在不同網(wǎng)橋上的網(wǎng)絡就能夠相互通信。下面我們來看看 docker host 滿不滿足這些條件呢?
ip r
查看 host 上的路由表:
# ip r
......
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
172.22.16.0/24 dev br-5d863e9f78b6 proto kernel scope link src 172.22.16.1
......
172.17.0.0/16 和 172.22.16.0/24 兩個網(wǎng)絡的路由都定義好了。再看看 ip forwarding:
# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
ip forwarding 也已經(jīng)啟用了。
條件都滿足,為什么不能通行呢?
我們還得看看 iptables:
# iptables-save
......
-A DOCKER-ISOLATION -i br-5d863e9f78b6 -o docker0 -j DROP
-A DOCKER-ISOLATION -i docker0 -o br-5d863e9f78b6 -j DROP
......
原因就在這里了:iptables DROP 掉了網(wǎng)橋 docker0 與 br-5d863e9f78b6 之間雙向的流量。
從規(guī)則的命名 DOCKER-ISOLATION
可知 docker 在設計上就是要隔離不同的 netwrok。
那么接下來的問題是:怎樣才能讓 busybox 與 httpd 通信呢?
答案是:為 httpd 容器添加一塊 net_my2 的網(wǎng)卡。這個可以通過docker network connect
命令實現(xiàn)。
我們在 httpd 容器中查看一下網(wǎng)絡配置
容器中增加了一個網(wǎng)卡 eth2,分配了 my_net2 的 IP 172.22.16.3。現(xiàn)在 busybox 應該能夠訪問 httpd 了,驗證一下。
busybox 能夠 ping 到 httpd,并且可以訪問 httpd 的 web 服務。
關于如何理解Docker容器之間的連通性問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業(yè)資訊頻道了解更多相關知識。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。