2017-04-19 140 views
0

我们有运行的Docker容器作为主进程(PID 1)。我们还通过systemd单元在Docker容器中启动了我们的工作进程。我们的Docker容器使用CentOS 7.2。 我们已经配置了Docker 停止超时,以便我们可以处理在Docker容器内运行的工作进程的正常关闭。 当我们停止Docker容器时,我们可以看到SIGTERM被接收到了容器内运行PID 1的systemd进程。容器也等待我们配置的停止超时。 但是systemd进程没有将这个SIGTERM转发给我们已经开始使用systemd单元的工作进程。 从日志看来,它看起来像systemd收到SIGTERM它试图重新执行自己。我们尝试在我们的systemd单元文件中添加KillMode = mixed,但它不适用于我们。为什么systemd进程在PID 1的docker容器中运行,未将SIGTERM转发到docker stop上的子进程

有什么办法可以将SIGTERM从systemd进程转发到子进程?

+0

可能是一个有用的阅读:https://engineeringblog.yelp.com/2016/01/dumb-init-an-init-for-docker.html –

+0

从共享的文章,它看起来像普通的系统init(systemd在我们案例)应该能够将SIGTERM转发给子进程,但这在我们的例子中确实不会发生。我们想要使用systemd来进行设置。寻找将信号从systemd传递给子进程的方式。 – Sachin

回答

-1

请粘贴您的码头运行命令。我想你不得不添加这2个选项。

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

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

相关问题