简介
看到很多理论里讲,docker是依赖了各种namespace实现隔离,但是使用
ip netns list
命令啥网络命名空间也看不到,难道是被忽悠了,docker 的网络实现没有使用net namespace?让人很困惑
寻根
实际上docker 的确使用了netns,只不过docker 创建的netns不在默认的/var/run/netns 目录下,导致ip工具查询不到
链接docker netns到系统默认目录
ln -s /var/run/docker/netns /var/run/netns
执行完上面的命令再看看,可以查询到所有的网络命名空间了
[root@codeB operator]# ip netns list
0e11a0755d03 (id: 9)
56e033856677 (id: 8)
5264fb718123 (id: 7)
7acf381fb38d (id: 6)
2d8a1cdf604f (id: 5)
a7a18d4abc69 (id: 4)
cf11b9f2ed1d (id: 3)
e374cc755516 (id: 2)
ca50d5d3aaba (id: 1)
43442f0d3bcb (id: 0)
default
查看下netns下面的网络设备信息
[root@codeB operator]# ip netns exec 43442f0d3bcb ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
3: eth0@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1440 qdisc noqueue state UP group default
link/ether 12:cc:34:44:2f:7d brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 10.244.194.9/32 scope global eth0
valid_lft forever preferred_lft forever
4: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
link/ipip 0.0.0.0 brd 0.0.0.0
参考
https://stackoverflow.com/questions/31265993/docker-networking-namespace-not-visible-in-ip-netns-list