当我创建一个新的Docker容器时,就像使用
docker run -it -m 560m --cpuset-cpus=1,2 ubuntu sleep 120
并检查其命名空间,我可以看到已创建新的命名空间(以pid 7047为例)。
root@dude2:~# ls /proc/7047/ns -la
total 0
dr-x--x--x 2 root root 0 Jul 7 12:17 .
dr-xr-xr-x 9 root root 0 Jul 7 12:16 ..
lrwxrwxrwx 1 root root 0 Jul 7 12:17 ipc -> ipc:[4026532465]
lrwxrwxrwx 1 root root 0 Jul 7 12:17 mnt -> mnt:[4026532463]
lrwxrwxrwx 1 root root 0 Jul 7 12:17 net -> net:[4026532299]
lrwxrwxrwx 1 root root 0 Jul 7 12:17 pid -> pid:[4026532466]
lrwxrwxrwx 1 root root 0 Jul 7 12:17 user -> user:[4026531837]
lrwxrwxrwx 1 root root 0 Jul 7 12:17 uts -> uts:[4026532464]
root@dude2:~# ls /proc/self/ns -la
当我使用 ip netns list
命令查看时,我无法看到新的网络命名空间。
dude@dude2:~/docker/testroot$ ip netns list
dude@dude2:~/docker/testroot$
任何想法为什么?
/var/run/docker/netns
,以便ip
命令能够找到它。命令如下:docker run -it --rm -v /var/run/docker/netns:/var/run/netns --privileged=true nicolaka/netshoot ip netns list
- Jarek Przygódzki/run/netns/
内创建一个空文件“foo”,然后将/proc/.../ns/net
绑定到/run/netns/foo
。这将确保即使原始进程死亡并且PID被重用,旧PID的网络命名空间仍保持开放,直到您卸载或重新启动,但它永远不会错误地指向新进程的网络命名空间。 - TheDiveOcd /var/run; sudo ln -s docker/netns netns
。 - Alec Istominls -l
中它们显示为net -> 'net:[4026532543]'
。这会导致错误mount: /run/netns/abc: mount(2) system call failed: Not a directory.
。 - Paulmount --bind ...
),而不是目录,这与指向nsfs文件系统的文件路径完美配合。还可以在我的Linux内核命名空间发现Go包的单元测试之一中查看示例,https://github.com/TheDiveO/lxkns/blob/42457374d7d786e43244423bda7414677e48a525/discovery_bindmount_test.go#L52。 - TheDiveO