【问题标题】:Monitoring node processes within docker containers监控 docker 容器中的节点进程
【发布时间】:2015-11-26 06:36:28
【问题描述】:

我有一个 docker-compose 文件,它创建 3 个 Node-js 容器和一个 Nginx 容器作为负载平衡的转发代理。

当 Node-js 容器失败时如何监控和重启它们?

传统观点认为所有容器都应该只有一个进程。所以在节点容器上运行 systemd(或类似的)会打破这种模式。

__--== 更新 ==--__

正如下面@mishunika 所说,如果节点进程失败并带有正确的退出代码并且容器上有正确的重启策略,它将重启。

【问题讨论】:

    标签: javascript node.js nginx docker docker-compose


    【解决方案1】:

    首先,这真的取决于 node.js 容器在什么情况下可能会失败,如果失败了,容器应该可能会停止并返回退出状态码。

    从 docker 1.2 开始,有所谓的restart policies。我想一个失败的节点实例可能会停止容器并返回一个非零值。在这种情况下,您可以在容器级别指定 on-failure 策略。

    在撰写中,您可以通过以下方式指定它:

    container_name:
        build: .
        ...
        restart: on-failure
    

    【讨论】:

    • 当你“失败的节点实例可能会停止容器”是 100%,因为我在围绕它的文档中找不到任何东西。
    • 如果容器中的进程退出,则容器停止,在容器inspect中可以看到进程的退出状态。没有进程,容器就不存在。不确定记录在哪里,这只是 docker 工作原理的基础之一。
    • @AndrewMcLagan 是的,正如 dnephin 所说,如果进程退出,容器就会停止。这是一个根本的事情。无论如何,正如我之前所说,这取决于您所说的“失败”是什么意思。例如,如果 node.js 进入无响应状态并且没有退出,则上述过程将不起作用。此外,supervisor 和 systemd 都不会检测到这一点,但我认为 nodejs 这样受欢迎的产品不会出现这种情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 1970-01-01
    • 2019-10-18
    • 2019-07-24
    • 2019-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多