日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

docker网络原理

發布時間:2025/4/16 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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网络原理的全部內容,希望文章能夠幫你解決所遇到的問題。

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