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

我们如何向正在运行的docker容器添加功能?,docker,containers,linux-capabilities,Docker,Containers,Linux Capabilities,是否可以在容器实际启动后添加功能(例如:NET_ADMIN) 几天前我启动了一个容器,它提供的一个服务正被其他几个远程运行在其他服务器上的进程所使用。我需要向它添加一个环回接口,但不幸的是,我忘记用--cap add=NET_ADMIN启动容器,因此现在无法添加接口 我正在寻找一个选项,如果有可能以某种方式将此功能赋予此容器。您可以使用docker exec-it{container\u id}/bin/bash在正在运行的容器中运行命令。 它将为您创建一个bash,您可以使用它运行命令。但一般

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

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


我正在寻找一个选项,如果有可能以某种方式将此功能赋予此容器。

您可以使用
docker exec-it{container\u id}/bin/bash
在正在运行的容器中运行命令。
它将为您创建一个bash,您可以使用它运行命令。但一般来说,对图像状态进行修改并不是一个好的做法,因为这样会降低图像的可移植性

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

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

VanagaS

1.停止集装箱:

docker stop yourcontainer;
2.获取容器id:

docker inspect yourcontainer;
3.修改hostconfig.json(默认docker路径:/var/lib/docker,您可以更改自己的路径)

4.搜索“CapAdd”,并将null修改为[“NET_ADMIN”]

5.重启主机中的docker

service docker restart;
6.启动您的Conatiner

docker start yourcontainer;

它对我有用,享受它。

默认情况下,容器中包含一个环回接口,即使您在没有网络的情况下启动一个环回接口。在没有环回接口的情况下,您使用了哪些选项来启动自己的应用程序?要求是添加额外的环回接口以分配额外的IP地址向正在运行的容器添加功能会更好。例如,如果您需要开始使用iptables,这也是必要的。我在这个容器中安装了一个应用程序,它使用硬编码的(可访问的)IP地址与外部服务通信。我已在同一容器中安装了外部服务。环回设置是为了确保服务在容器内通信。最佳实践是将每个服务安装在单独的容器中。您可以让它们在自己的docker网络上运行,并将这些网络连接到正在运行的容器。从这个问题和您的其他问题来看,听起来您试图将容器用作VM,而不是应用程序隔离工具,这在很大程度上是容器的反模式。服务只是可以在同一j2ee服务器中运行的另一个war文件。我不想不必要地创建另一个不会被使用的映像。这只是一个猜测,因为我不知道OP的要求,但我相信他们不希望停机,所以您的答案与“嘿,用正确的权限创建一个不同的容器”没有太大区别,是吗?我尝试添加了
[“SYS\u TRACE”]
这在Docker版本19.03.12上不起作用。添加[“NET_ADMIN”]在Docker版本19.03.5上起作用。
service docker restart;
docker start yourcontainer;