我有一个在 docker 容器中运行的 cronjob,它检查所有服务是否按预期运行。如果这个 cronjob 确定有问题我想停止 docker 容器(从内部......)
不幸的是 exit
只是停止了我的 cronjob 脚本
最佳答案
基本上,您需要 PID 1 退出才能停止容器。
我最初认为 kill -s SIGKILL 1
会起作用,但 PID 1 受到保护,所以它没有。
正如@Thomasleveil 所建议的那样,您可以将诸如 trap "exit"SIGINT SIGTERM
之类的代码添加到 PID 1 脚本中,这意味着进程将在发送 kill -s 时退出信号 1
。我稍微喜欢这种方法而不是你想出的方法(直接杀死子进程),因为它给了父进程一个清理的机会,而且父进程应该能够在没有 awk 的情况下找到子进程的 PID。
处理这个问题的最简单方法是使用某种监督进程,而 Docker 现在提供了一个名为“tini”的便捷方法。只需运行将参数 --init
添加到 docker run
,Docker 就会在容器中将 tini 设置为 PID 1。完整的描述在这里:https://docs.docker.com/engine/reference/run/#specify-an-init-process
关于docker - 从内部停止 docker 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31538314/