在正在运行的Docker容器中终止进程

我有一个运行在Docker容器中的服务器端应用程序。 其中的一个进程已经挂起,需要被杀死(应用程序将产生另一个进程来取代它)。

有什么办法可以在不停止Docker容器的情况下终止进程?

现在用Docker是不可能的,但是似乎定于0.8, 在这里看问题#1228。

但是可以使用lxc-attach在现有的容器中运行一个shell(见上面的问题注释),然后你可以从这里杀掉你挂起的进程:

$ lxc-attach -n FULLCONTAINERID /bin/bash 

你可以用docker ps得到FULLCONTAINERID –no-trunc = true:

root @ turmes / home / zoobab [35]#docker ps –no-trunc = true容器ID图像>命令C状态端口名称2741d88a51148e66d7b2b44d8c1cc6ed7d1515f370be5d00bd003d40cf8d575b zoobab / centos57:latest kamailio -P /var/run/kamailio.pid -m 64 – M 4 -u kamailio -g kamailio -D 1 19分钟angry_fermat
root @ turmes / home / zoobab [36]#

您可以使用exec命令在Docker 1.3中exec

 docker exec container_name kill process_name 

如果运行Docker 1.3或更高版本不是一个选项,您仍然可以使用nsenter访问Docker容器内的根shell。

这篇博文有你需要的所有说明。

一旦你有root权限的访问,你当然可以执行任何你喜欢的操作。

也许时代已经改变,但作为docker.latest: docker kill 593690fe0087当我运行docker ps时杀死了CONTAINER ID 。 我在那里有一个容器2个星期,只有当环境不好时才看到它。