linux - 如何从 docker 容器管理主机网络命名空间

标签 linux docker networking namespaces

我的目标是使用在最新的 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/

相关文章:

c - 如何为 3 个不同的 c 文件创建一个 makefile

python - Linux BC : Decimal/Floating Calculation NOT Accurate

database - 由于错误,Docker postgres 启动自动化无法创建数据库

arrays - 防止同步执行完成处理程序

linux - 扫描一个整数并在 NASM 中打印区间 (1, integer)

linux - Eclipse 不使用 .bashrc 中设置的路径

php - Docker 分离容器与耦合容器

elasticsearch - 如何在 docker compose 中设置具有多个主节点的 Elasticsearch 集群?

azure - 1 个 VM 连接到 2 个 VNET?

windows - 处理公司防火墙添加自签名证书