我有一个Web服务(网页),允许用户配置主机的网络接口(它基本上是用于配置主机NIC的网页)。现在我们正在考虑在docker容器中移动这样的服务。这意味着在容器内运行的sw应该能够修改docker在其上运行的主机的网络接口的配置。
我尝试使用 - network = host 启动一个docker,我使用 ip 命令来修改接口配置,但我能做什么(显然是?!?)获取权限被拒绝。
这可能有意义,因为从安全角度来看它可能是一个问题,更不用说你正在改变其他可能运行的容器所看到的网络配置,但我想知道是否有任何docker配置/设置可能允许我完全在docker容器中执行任务(由我自己承担风险)。
我的意思是,我至少可以想到一个工作区,在主机上运行服务(在docker容器之外),让docker和服务通过一些IPC机制相互通信。 这是一个解决方案,但不是最优的,因为这会制动码头工作范例,让所有东西都在容器内运行。此外,这意味着当我们使用新版本的软件升级容器时,我们可能还需要在容器外部升级模块。
答案 0 :(得分:2)
尝试以特权模式运行容器以删除容器限制:
docker run --net=host --privileged ...
如果这样可以解决您的问题,您可以将--privileged
替换为--cap-add
以及各种内核功能。想到的第一个特权是NET_ADMIN,您可以尝试使用它:
docker run --net=host --cap-add NET_ADMIN ...
有关配置权限的详细信息,请参阅this section of the docker run docs。