您好,登錄后才能下訂單哦!
本篇文章為大家展示了Docker容器如何訪問外部世界,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
在我們當前的實驗環境下,docker host 是可以訪問外網的。
容器默認就能訪問外網。
請注意:這里外網指的是容器網絡以外的網絡環境,并非特指 internet。
現象很簡單,但更重要的:我們應該理解現象下的本質。
在上面的例子中,busybox 位于 docker0
這個私有 bridge 網絡中(172.17.0.0/16),當 busybox 從容器向外 ping 時,數據包是怎樣到達 bing.com 的呢?
這里的關鍵就是 NAT。我們查看一下 docker host 上的 iptables 規則
在 NAT 表中,有這么一條規則:
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
其含義是:如果網橋 docker0
收到來自 172.17.0.0/16 網段的外出包,把它交給 MASQUERADE 處理。而 MASQUERADE 的處理方式是將包的源地址替換成 host 的地址發送出去,即做了一次網絡地址轉換(NAT)。
下面我們通過 tcpdump 查看地址是如何轉換的。先查看 docker host 的路由表:
默認路由通過 enp0s3 發出去,所以我們要同時監控 enp0s3 和 docker0 上的 icmp(ping)數據包。
當 busybox ping bing.com 時,tcpdump 輸出如下:
docker0 收到 busybox 的 ping 包,源地址為容器 IP 172.17.0.2,這沒問題,交給 MASQUERADE 處理。這時,在 enp0s3 上我們看到了變化:
ping 包的源地址變成了 enp0s3 的 IP 10.0.2.15
這就是 iptable NAT 規則處理的結果,從而保證數據包能夠到達外網。
busybox 發送 ping 包:172.17.0.2 > www.bing.com。
docker0 收到包,發現是發送到外網的,交給 NAT 處理。
NAT 將源地址換成 enp0s3 的 IP:10.0.2.15 > www.bing.com。
ping 包從 enp0s3 發送出去,到達 www.bing.com。
通過 NAT,docker 實現了容器對外網的訪問。
上述內容就是Docker容器如何訪問外部世界,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。