主管:进程崩溃时停止Docker容器

时间:2017-03-05 08:37:29

标签: linux ubuntu docker supervisord

我想使用SupervisorDocker容器中运行多个进程,described here, in Docker docs

它有效,但是文档没有说明当我开始崩溃的其中一个进程时会发生什么。

遵循docker行为逻辑 - 当进程崩溃时 - 容器应该停止,可能以后可能会由Docker根据重启策略重新启动。

但它不会发生,如果我开始退出的一个(或全部)应用程序 - 容器继续工作。

如果其中一个监控进程退出/崩溃,我怎么能告诉Supervisor以这种方式退出(并以这种方式停止容器,因为我在nodaemon=true模式下运行)?

2 个答案:

答案 0 :(得分:0)

如果您想在流程停止时退出容器,请不要使用主管(或任何其他流程管理器)。只需直接在容器中运行该过程。

但更重要的是:不要在容器中运行多个关键应用程序。 Docker容器的黄金法则不是每个容器1个进程,而是每个容器1个问题。这样,当1个问题(应用程序)退出时,您的容器可以正常关闭。

即使在您引用的示例中,它们也没有运行2个关键进程。他们正在运行1个应用程序进程,然后在同一个容器中托管sshd以进行ssh访问。如果sshd停止,那可能不是什么大问题。如果apache服务器停止......好吧,他们正在使用supervisor来处理它并自动重启它。

获取您想要的内容,将您的问题分成多个容器,然后直接在容器中运行该应用程序。

答案 1 :(得分:0)

我发现this文章描述了它有时可以在一个容器中运行多个进程。

他描述了如何使用honcho来创建您想要的行为:当其中一个进程失败时停止整个容器。

我现在要尝试这个,但我仍然有点怀疑,因为supervisord在docker世界中被广泛使用,并且在他们自己的网站上也是described