当我们停止发送到pid 1时,docker如何处理subprocess?

我目前在一个Dockerfile中使用ENTRYPOINT [“/sbs/start.sh”]。 所以当一个容器启动时,start.sh以pid 1的forms运行,而我的start.sh脚本跨越两个subprocess到pid1。 我的问题是,如果docker停止命令发送到pid1,docker如何处理subprocess? 孩子的过程是否会优雅地停止? 还是会被强行杀害?

在这些有subprocess的情况下,有一个简单的进程pipe理器和init系统( https://github.com/Yelp/dumb-init或supervisor)来处理这些问题会更好吗? 如果是的话,请build议一个轻量级的init系统? 或者可以pid1(在我的情况下start.sh)照顾这些问题?

ps -ef的输出:

root 1 0 0 19:23 ? 00:00:00 /bin/bash /sbs/start.sh root 13 1 0 19:23 ? 00:00:00 /sbs/bin/envconsul... root 20 13 1 19:23 ? 00:00:21 /usr/lib/... 

任何帮助表示赞赏。

Docker在这里不会做任何事情。 它只是给PID 1发送信号。如果PID 1有子元件,则需要处理这些信号。 这是标准的unix模型。

有关更多信息,您可以阅读Docker和PID 1 Zombie Reaping Problem 。

当PID 1退出时,容器将退出,所以孩子不一定会正常退出。 如果你想让他们优雅地离开,你将不得不有一些东西悬而未决知道如何做到这一点。

上面的链接提供了一个解决scheme,一个来自Phusion的图像,该图像具有init-style PID 1来处理这样的事情。 还有其他的解决办法; 那只是一个select。