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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

docker网络原理

發布時間:2025/4/16 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 docker网络原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

以下內容引用Docker —— 從入門到實踐

當 Docker 啟動時,會自動在主機上創建一個 docker0 虛擬網橋,實際上是 Linux 的一個 bridge,可以理解為一個軟件交換機。它會在掛載到它的網口之間進行轉發。
同時,Docker 隨機分配一個本地未占用的私有網段(在 RFC1918 中定義)中的一個地址給 docker0 接口。比如典型的 172.17.42.1,掩碼為 255.255.0.0。此后啟動的容器內的網口也會自動分配一個同一網段(172.17.0.0/16)的地址。
當創建一個 Docker 容器的時候,同時會創建了一對 veth pair 接口(當數據包發送到一個接口時,另外一個接口也可以收到相同的數據包)。這對接口一端在容器內,即 eth0;另一端在本地并被掛載到 docker0 網橋,名稱以 veth 開頭(例如 vethAQI2QT)。通過這種方式,主機可以跟容器通信,容器之間也可以相互通信。Docker 就創建了在主機和所有容器之間一個虛擬共享網絡。如圖

下面以自定義的容器方式,一步步配置網絡, 達到以下目標:

  • 容器間能夠通信
  • 容器能夠聯外網

首先創建一個容器,但不使用默認網絡配置,使用--net=none選項:

docker run -t -i --net=none ubuntu:14.04 bash docker ps # 獲取容器id=d344e6e05a99

獲取容器pid:

docker inspect d344e6e05a99 | grep -i "\<pid\"" # "Pid": 27383, pid=27383

創建netns,并把容器放入新建的netns中,好像不能使用ip netns命令創建,使用以下方法創建:

sudo ln -s /proc/$pid/ns/net /var/run/netns/$pid

驗證是否創建成功:

sudo ip netns show # 27383 # ns1 # test

可見命名為27383的netns已經成功創建!

接下來創建一個veth對,其中一個設置為容器所在的netns

sudo ip link add name veth_d344 type veth peer name veth_d344_peer sudo ip link set veth_d344_peer netns $pid

進入$pid netns設置網卡名稱和ip:

sudo ip netns exec 27383 bash sudo ip link set veth_d344_peer name eth0 sudo ifconfig eth0 10.0.0.2/24 # 設置ip為10.0.0.2 ping 10.0.0.2 # 能ping通 exit

在容器中ping 10.0.0.2也能ping通,說明設置正確

ping 10.0.0.2 # 應該不通 docker exec d344e6e05a99 ping 10.0.0.2 # 成功ping通

創建網橋,并把veth另一端的虛擬網卡加入新創建的網橋中:

sudo brctl addbr br0 # 創建新網橋br0 sudo brctl addif br0 veth_d344 # 把虛擬網卡加入網橋br0中 sudo ifconfig br0 10.0.0.1/24 # 設置網橋ip sudo ip link set veth_d344 up # 啟動虛擬網卡

測試下:

ping 10.0.0.2 # 成功ping通 docker exec d344e6e05a99 ping 10.0.0.1 # 成功ping通

若以上兩個都能ping通說明配置成功!

最后,我們需要使得容器能夠聯外網,需要設置NAT,使用iptables設置:

sudo iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o em1 -j MASQUERADE

設置容器默認路由為網橋ip(注意在容器內使用route add 添加, 會出現SIOCADDRT: Operation not permitted錯誤), 因此只能使用ip netns exec設置:

sudo ip netns exec 27383 route add default gw 10.0.0.1

測試,此時請確保宿主機能夠聯外網,進入容器內部:

ping baidu.com # 成功ping通,確保icmp沒有被禁

轉載于:https://www.cnblogs.com/int32bit/p/5310333.html

總結

以上是生活随笔為你收集整理的docker网络原理的全部內容,希望文章能夠幫你解決所遇到的問題。

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