我的目标是使用在最新的 docker 容器(版本 17.12)中运行的应用程序来管理主机上的网络命名空间。
我尝试使用以下选项启动 docker 容器:
docker run -ti --entrypoint=/bin/bash --network=host --pid=host --
privileged --cap-add ALL -v /run:/run debian
这允许我在主机上创建一个网络命名空间,但是一旦容器被销毁,从容器内创建的网络命名空间仍然可见,但我无法使用它们。
container # ip netns add test
container # exit
host # ip netns
RTNETLINK answers: Invalid argument
RTNETLINK answers: Invalid argument
test
testhost
host # ip netns exec test ip addr
setting the network namespace "test" failed: Invalid argument
知道如何启动 docker 容器以便在其中运行的应用程序可以管理主机网络命名空间吗?
最佳答案
我找到的唯一解决方案是启动一个 docker,从主机绑定(bind)/proc 并使用 nsenter 更改挂载命名空间。
host # docker run .... -v /proc:/host/proc /bin/bash
container # nsenter --mount=/host/proc/1/ns/mnt ip netns add test
关于linux - 如何从 docker 容器管理主机网络命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48653777/