日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

容器学习 之 容器访问外部网络(十四)

發布時間:2024/2/28 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 容器学习 之 容器访问外部网络(十四) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

容器訪問外部世界

docker host 是可以訪問外網的。

容器也能訪問外網

為什么容器能夠訪問到外網呢?我們先來查看iptables的規則

-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE

其含義是:來自 172.17.0.0/16 網段的包,目標地址是外網(! -o docker0),就把它交給 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。
  • 外部世界訪問容器

    docker 可將容器對外提供服務的端口映射到 host 的某個端口,外網通過該端口訪問容器。容器啟動時通過-p參數映射端口:

    容器啟動后,可通過 docker ps 或者 docker port 查看到 host 映射的端口。在上面的例子中,httpd 容器的 80 端口被映射到 host 32773 上,這樣就可以通過 :<32773> 訪問容器的 web 服務了。

    我們也可以在 -p 中指定映射到 host 某個特定端口,例如可將 80 端口映射到 host 的 8080 端口:

    每一個映射的端口,host 都會啟動一個 docker-proxy 進程來處理訪問容器的流量:

    以 0.0.0.0:32773->80/tcp 為例分析整個過程:

  • docker-proxy 監聽 host 的 32773 端口。
  • 當 curl 訪問 10.0.2.15:32773 時,docker-proxy 轉發給容器 172.17.0.2:80。
  • httpd 容器響應請求并返回結果。
  • 總結

    以上是生活随笔為你收集整理的容器学习 之 容器访问外部网络(十四)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。