繁体   English   中英

为什么试图杀死Docker容器中的进程使我无法参与其中?

[英]Why does trying to kill a process in Docker container take me out of it?

我的macOS上有一个v6.10.0节点服务器,它是从DockerfileCMD自动启动的。 通常,在我的本地开发无容器环境中,我将使用CTRL + C杀死服务器。 ps aux | grep node无法(或不知道如何)在容器中执行此操作 ps aux | grep node尝试手动终止进程。 所以,我得到这样的东西:

myapp [master] :> kubectl exec -it web-3127363242-xb50k bash
root@web-3127363242-xb50k:/usr/src/app# ps aux | grep node
root        15  0.4  0.9 883000 35804 ?        Sl   05:49   0:00 node /usr/src/app/node_modules/.bin/concurrent --kill-others npm run start-prod npm run start-prod-api
root        43  0.1  0.6 743636 25240 ?        Sl   05:49   0:00 node /usr/src/app/node_modules/.bin/better-npm-run start-prod
root        44  0.1  0.6 743636 25140 ?        Sl   05:49   0:00 node /usr/src/app/node_modules/.bin/better-npm-run start-prod-api
root        55  0.0  0.0   4356   740 ?        S    05:49   0:00 sh -c node ./bin/server.js
root        56  0.0  0.0   4356   820 ?        S    05:49   0:00 sh -c node ./bin/api.js
root        57 18.6  4.9 1018088 189416 ?      Sl   05:49   0:08 node ./bin/server.js
root        58 13.9  5.2 1343296 197576 ?      Sl   05:49   0:06 node ./bin/api.js
root        77  0.0  0.0  11128  1024 ?        S+   05:50   0:00 grep node

当我试图杀死其中一个

kill -9 15

我从容器的外壳中取出,回到计算机的外壳中。 当我再次进入该容器时,我看到该进程仍然在那里,并且具有相同的进程ID。 这个示例使用Kubernetes容器,但我相信使用docker docker exec命令输入Docker容器的结果相同。

每个docker容器都有一个ENTRYPOINT ,可以使用ENTRYPOINTCMD声明在dockerfile中设置,或者在运行命令docker run myimage:tag "entrypoint_command" ENTRYPOINT进程被杀死时,我认为容器也被杀死了。 据我了解, docker exec有点像“附加”命令到容器。 但是,如果ENTRYPOINT向下,则没有容器可连接。

据我所知,Kubernetes将在发生故障后重启容器。 这可能是您看到备份过程的原因。 我还没有真正使用Kubernetes,但是我会尝试使用扩展复制来终止您的进程的方式。

容器将您所需的应用隔离为命名空间内的pid 1。 所需的应用程序是您的入口点或cmd(如果您没有定义入口点)。 如果杀死进程导致pid 1退出,则容器将立即停止(类似于杀死linux主机上的pid 1),同时杀死所有其他pid。 如果此容器具有重新启动策略,则它将重新启动,并且进程将获得与上次运行时相同的pid(其他条件均相同,并且通常位于容器内部)。

为了防止容器停止运行,即使子进程被终止,您也需要调整入口点以保持运行状态。 从这一方面来说,使容器退出通常是通过返回到干净状态来处理意外错误的首选行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM