我们如何为正在运行的docker容器添加功能?

Van*_*gaS 6 containers docker linux-capabilities

容器实际启动后是否可以添加功能(例如:NET_ADMIN)?

我几天前启动了一个容器,并且由其提供的服务正被其他几个在其他服务器上远程运行的进程使用.我需要为它添加一个loopback接口,但不幸的是,我忘了启动容器,--cap-add=NET_ADMIN因此现在无法添加接口.

我正在寻找一个选项,如果有可能以某种方式将此功能提供给此容器.

Rya*_* Li 8

VanagaS

1.Stop容器:

docker stop yourcontainer;
Run Code Online (Sandbox Code Playgroud)

2.获取容器ID:

docker inspect yourcontainer;
Run Code Online (Sandbox Code Playgroud)

3.Modify hostconfig.json(默认的docker路径:/ var/lib/docker,你可以改变你的)

vim /var/lib/docker/containers/containerid/hostconfig.json
Run Code Online (Sandbox Code Playgroud)

4.搜索"CapAdd",并将null修改为["NET_ADMIN"];

....,"VolumesFrom":null,"CapAdd":["NET_ADMIN"],"CapDrop":null,....
Run Code Online (Sandbox Code Playgroud)

5.在主机上重启docker;

service docker restart;
Run Code Online (Sandbox Code Playgroud)

6.启动你的容器;

docker start yourcontainer;
Run Code Online (Sandbox Code Playgroud)

它适合我,享受它.

  • 只是一个疯狂的猜测,因为我不知道 OP 的要求,但我相信他们不想停机,所以你的答案与“嘿,只是创建一个具有正确权限的不同容器”并没有太大不同,是吗? (3认同)
  • 为什么这么多人点赞?问题很明确:如何对正在运行的容器执行此操作。答案从“停止你的容器”开始。如果您要停止容器,则无需编辑 json 文件。只是 docker run --cap-add 但考虑到某些包含需要半小时才能重新启动(如大型数据库),这不是解决方案。 (2认同)

BMi*_*tch 5

不,您不能修改正在运行的容器的功能。这些只能在您第一次创建或运行(这只是创建+启动)容器时定义。您需要创建一个具有所需功能的新容器。

我应该指出,您可以使用 为正在运行的容器分配额外的网络接口docker network connect,但我不知道您可以使用任何环回驱动程序来使用此技术解决您的问题。