1. 程式人生 > >docker容器技術系列6:docker 網路名稱空間找不到

docker容器技術系列6:docker 網路名稱空間找不到

問題:

建立docker swarm集群后,準備分析其網路架構。在Manager node上找到了相關的network命令空間(ip netns命令),但是worker node卻沒有,導致找不到對應的虛擬網絡卡。如下圖所示:

網絡卡veth0bf6865的對端介面索引為9,但是我怎麼也找不到索引為9的介面,ip netns命令也不顯示內容。於是就思考是否有是ip netns出錯?果然,找到本文答案。

解決方案:

查過資料才發現,ip netns 只能檢視到 /var/run/netns 下面的網路名稱空間。而docker預設是放在/var/run/docker/netns/的,所以ip netns命令無顯示。解決方案是:在

/var/run/netns目錄建立指向各個命令空間的軟連結。

方法一:

         檢視docker容器的PID,然後在proc檔案中找到其namespace檔案,建立軟連結。

ln -s /proc/70212/ns/net /var/run/netns/64d492488661

也可以使用inspect的-f引數 + Go模板(不懂):

pid=`docker inspect -f '{{.State.Pid}}' 64d492488661`
[[email protected] ~]<20181115 09:30:01># echo $pid
70212
[[email protected]
~]<20181115 09:30:01># ln -s /proc/$pid/ns/net /var/run/netns/64d492488661

方法二:

直接為docker的每個名稱空間檔案(目錄為/var/run/docker/netns/)建立軟連結。如下:

然後就可以用ip netns exec命令檢視各個名稱空間的介面了。

總結

遇到問題多多思考,總能找到其中的貓膩。接下來筆者將分析docker使用的vxlan網路原理。