docker - 从内部停止 docker 容器

标签 docker

我有一个在 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/

相关文章:

jenkins - 无法让 Jenkins Docker slave 构建 docker 镜像

powershell - 如何有条件地包括安装卷

linux - 桥接模式下的docker网络

Windows 版 Docker 上的 MongoDB ~ 导出/导入数据

docker - 在kubernetes上的Lagom中部署微服务的版本控制

docker - Linux服务器上没有Internet的docker上的Cassandra/Scylla

tomcat - 为什么我的 tomcat docker 容器不部署 webapp?

java - Hyperledger Fabric-无法解析主机-在发布 Assets 以链码时

docker - 使用 docker 运行 nuxt3

docker - nginx反向代理简单配置不重定向