docker容器技术系列6:docker 网络命名空间找不到

  • Post author:
  • Post category:其他



问题:


创建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`
[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使用的vxlan网络原理。



版权声明:本文为zhaogang1993原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。