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文件,建立软链接。

docker容器技术系列6:docker 网络命名空间找不到_第1张图片

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

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

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

方法二:

直接为docker的每个命名空间文件(目录为/var/run/docker/netns/)建立软链接。如下:

然后就可以用ip netns exec命令查看各个命名空间的接口了。

docker容器技术系列6:docker 网络命名空间找不到_第2张图片

总结

遇到问题多多思考,总能找到其中的猫腻。接下来笔者将分析docker使用的vxlan网络原理。

你可能感兴趣的:(虚拟化)