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网络原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 根据当前系统日期求出本周,本月,本年,上
- 下一篇: [caffe]深度学习之图像分类模型VG