我们有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进程转发到子进程?
答案 0 :(得分:0)
您可以尝试使用提供类似功能的替代品,而不是运行systemd本身。如果您将docker-systemctl-replacement作为容器的入口点,那么它将查找您提供的systemd单元文件 - 在容器启动时,它从单元描述符运行ExecStart,并在接收到SIGSTOP后,它将从每个单元运行ExecStop描述。听起来这就是你想要的功能。
答案 1 :(得分:-1)
请粘贴您的泊坞窗运行命令。
我想你必须添加这两个选项。
--stop-signal=SIGRTMIN+3 --env container=docker