我有一个标准的作业管理系统,它允许我将 shell 脚本作为作业运行,并在命令或运行时间过长时终止它们。
我的一些作业会以命令的形式运行 Docker 容器docker run -ti --rm .....
。这在理想情况下运行良好:我可以将任何我想要的 CPU 和内存限制转发给 Docker 以应用于容器,并且当容器完成时我的作业也会完成。
但是,如果作业管理系统想要提前中止作业,事情就会出错。如果只是kill -9
进程docker run
,Docker 守护进程不会注意到,即使作业管理系统认为它已经停止了作业,容器仍会继续运行而不会中止。如果它向 发送不同的信号docker run
,如 SIGTERM 或 SIGHUP,该信号将转发到容器中的初始进程。但是,在 Linux 规则围绕 PID 1 的默认信号处理程序之间,以及进程不一定合作/响应/愿意在任何给定信号上停止,这也不能可靠地停止容器。
- 有什么方法可以调用,
docker run
以便守护进程检测连接的 Docker 客户端的断开连接并终止容器? - 我可以配置作业管理系统来向进程发送一个特定信号
docker run
以正常终止,从而终止连接的容器吗?
1
最佳答案
1
您不应该终止该docker run
进程。您应该终止容器。您可以通过运行来获取容器 PID docker container inspect <name_or_id> -f '{{.State.Pid}}'
。
|
docker stop
– 或者我误解了你的困境?–
|