创建docker容器后本来应该有新的命名空间(如果有独立网络的话),那么可以通过 ip netns 命令查看到命名空间,但是实际上却看不到。

查过资料才发现,ip netns 只能查看到/var/run/netns 下面的网络命名空间。docker 不像openstack neutron 会自动在这个文件创建命名空间名字,需要手动创建。

创建方法是:

pid=`docker inspect -f '{{.State.Pid}}' $container_id`
ln -s /proc/$pid/ns/net /var/run/netns/$container_id

通过ip netns list查看网络 namespace

通过ip netns exec 39714 bash在该网络namespace下执行命令