我有一个标准的作业管理系统,它允许我将 shell 脚本作为作业运行,并在命令或运行时间过长时终止它们。

我的一些作业会以命令的形式运行 Docker 容器docker run -ti --rm .....。这在理想情况下运行良好:我可以将任何我想要的 CPU 和内存限制转发给 Docker 以应用于容器,并且当容器完成时我的作业也会完成。

但是,如果作业管理系统想要提前中止作业,事情就会出错。如果只是kill -9进程docker run,Docker 守护进程不会注意到,即使作业管理系统认为它已经停止了作业,容器仍会继续运行而不会中止。如果它向 发送不同的信号docker run,如 SIGTERM 或 SIGHUP,该信号将转发到容器中的初始进程。但是,在 Linux 规则围绕 PID 1 的默认信号处理程序之间,以及进程不一定合作/响应/愿意在任何给定信号上停止,这也不能可靠地停止容器。

  1. 有什么方法可以调用,docker run以便守护进程检测连接的 Docker 客户端的断开连接并终止容器?
  2. 我可以配置作业管理系统来向进程发送一个特定信号docker run以正常终止,从而终止连接的容器吗?

1

  • 2
    使用有什么问题docker stop– 或者我误解了你的困境?


    – 


最佳答案
1

您不应该终止该docker run进程。您应该终止容器。您可以通过运行来获取容器 PID docker container inspect <name_or_id> -f '{{.State.Pid}}'