【问题标题】:How to manage hosts network namespaces from docker container如何从 docker 容器管理主机网络命名空间
【发布时间】:2018-07-17 03:37:51
【问题描述】:

我的目标是使用在最新的 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 容器,以便在其中运行的应用程序可以管理主机网络命名空间吗?

【问题讨论】:

  • 您是否尝试将/etc/ 也安装为卷?
  • @DerekBrown 刚刚尝试过,没有任何变化。为什么您认为从主机安装 /etc 会有所帮助?我跟踪了“ip netns”命令,他们只尝试打开容器或主机中不存在的 /etc/netns。

标签: linux docker networking namespaces


【解决方案1】:

我找到的唯一解决方案是启动一个 docker,从主机绑定 /proc 并使用 nsenter 更改挂载命名空间。

host # docker run .... -v /proc:/host/proc /bin/bash
container # nsenter --mount=/host/proc/1/ns/mnt ip netns add test

【讨论】:

  • 这会留下容器的命名空间——我不认为你可以。运行ip netns exec $container_binary
猜你喜欢
  • 1970-01-01
  • 2016-02-27
  • 1970-01-01
  • 2020-07-17
  • 1970-01-01
  • 2020-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多