docker容器間網絡通信

我們都知道,同主機同網絡下的容器可以通過容器的網橋來進行通信,但是不同網絡的容器不能通信。原因是什麼呢?
參考 http://blog.csdn.net/CloudMan6/article/details/73825691 這個帖子,我自己做了實驗,記錄一下

查看主機ip轉發是否開啓 sysctl net.ipv4.ip_forward。既然已經開啓,且各個網橋都連接在主機上,爲什麼不能ping通 ?
我們看一下ip 的設置
這裏寫圖片描述

可以看到
172.17.0.0/16 對應docker0
172.22.16.0/24 對應 br-31420d31f051

查看iptables的設置
這裏寫圖片描述

發現iptables會把docker0和br-31420d31f051兩個網段的流量drop掉,所以兩個網段無法通信。

一般我們可以通過爲容器配置網卡的方式把容器加入另一個網段,這樣就可以互相通信。
執行docker network connect network_name containerID

這裏寫圖片描述

此時進入容器,發現容器有兩個虛擬網卡,即對應兩個ip地址
這裏寫圖片描述

此時容器ping通

盜圖一張,來自http://blog.csdn.net/CloudMan6/article/details/73825691 這個帖子
這裏寫圖片描述