为什么systemd进程在具有PID 1的docker容器中运行,而不是将SIGTERM转发到docker stop上的子进程

时间:2017-04-19 04:25:20

标签: docker centos7 systemd sigterm

我们有Docker容器,它运行 systemd作为主进程(PID 1)。我们还通过systemd单元在Docker容器中启动了我们的工作进程。我们的Docker容器使用CentOS 7.2。 我们已经配置了Docker 停止超时,以便我们可以正常关闭在Docker容器中运行的工作进程。 当我们停止Docker容器时,我们可以看到SIGTERM被接收到systemd进程,该进程在容器内运行PID 1。容器也等待我们配置的停止超时。 但 systemd进程不会将此SIGTERM转发给我们已开始使用systemd unit 的工作进程。 从日志看起来,当systemd收到SIGTERM时,它会尝试重新执行自己。我们尝试在系统单元文件中添加 KillMode = mixed ,但它对我们没有用。

有没有办法将SIGTERM从systemd进程转发到子进程?

2 个答案:

答案 0 :(得分:0)

您可以尝试使用提供类似功能的替代品,而不是运行systemd本身。如果您将docker-systemctl-replacement作为容器的入口点,那么它将查找您提供的systemd单元文件 - 在容器启动时,它从单元描述符运行ExecStart,并在接收到SIGSTOP后,它将从每个单元运行ExecStop描述。听起来这就是你想要的功能。

答案 1 :(得分:-1)

请粘贴您的泊坞窗运行命令。

我想你必须添加这两个选项。

--stop-signal=SIGRTMIN+3 --env container=docker