在运行中的Docker容器中杀死一个进程

7
我有一个运行在 Docker 容器中的服务器端应用程序。其中的一个进程挂起了,需要被终止掉(然后该应用程序将生成另一个进程来替换它)。
有没有办法杀死这个进程而不停止 Docker 容器?
5个回答

2

目前Docker还不能做到这一点,但好像计划在0.8版本中实现,详见issue #1228 这里

不过,你可以使用lxc-attach在一个已存在的容器中运行shell(上述问题评论中提到),然后从那里结束挂起的进程:

 $ lxc-attach -n FULLCONTAINERID /bin/bash

1
谢谢ometra。这个问题似乎是关于在现有运行的容器上运行另一个命令-非常有用,也是一个更普遍的情况。实际上,我最终通过在docker主机上找到挂起的进程并直接从那里杀死它来解决了这个问题,而不是将bash连接到容器中。不过你的答案也可以。谢谢。 - Tania Ang

1
也许时间已经变了,但截至docker.latest: 当我运行docker ps时,docker kill 593690fe0087杀死了CONTAINER ID。我有一个容器在那里待了两个星期,直到环境没有启动才发现它。

1
如果无法运行Docker 1.3或更高版本,则仍然可以使用nsenter在Docker容器内获取root shell访问权限。 这篇博客文章提供了所有必要的指令。
一旦您获得root shell访问权限,您当然可以执行任何操作。

1
您可以通过docker ps --no-trunc=true命令获取FULLCONTAINERID:

root@turmes /home/zoobab [35]# docker ps --no-trunc=true CONTAINER ID IMAGE > COMMAND C STATUS PORTS NAMES 2741d88a51148e66d7b2b44d8c1cc6ed7d1515f370be5d00bd003d40cf8d575b zoobab/centos57:latest kamailio -P /var/run/kamailio.pid -m 64 -M 4 -u kamailio -g kamailio -D 1 Up 19 minutes angry_fermat
root@turmes /home/zoobab [36]#


0

现在您可以使用 Docker 1.3 中的 exec 命令 来执行此操作:

docker exec container_name kill process_name

我使用了你说的相同命令,但是我无法杀死这个进程。当我输入“docker top container_name”时,我仍然可以看到这个进程。现在我该怎么办? - priya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接