【问题标题】:Restarting a Node app running with pm2-runtime causes the container to disappear but app still runs重新启动使用 pm2-runtime 运行的 Node 应用程序会导致容器消失但应用程序仍在运行
【发布时间】:2019-12-04 05:04:20
【问题描述】:

我的 NodeJs 应用程序已成功部署在 Docker 容器中。我把这个命令放在 Dockerfile 中:

CMD ["pm2-runtime", "app.js"]

从 PM2 关键指标面板重新启动应用程序后,容器消失了(docker ps 没有显示任何内容)但奇怪的是应用程序仍在运行。几分钟后,我发现 pm2 正在服务器中全局运行它。 pm2 ls 显示应用进程。

这种行为是否正常?可以预防吗?

【问题讨论】:

    标签: node.js docker pm2


    【解决方案1】:

    这不是预期的行为,可能存在相同的应用程序在具有相同密钥的主机上运行的情况,因此通过发出重新启动命令可以重新启动两个进程,但 pm2 仪表板能够识别该进程,即使它针对相同的运行键。

    我假设,从仪表板重新启动后,有一些错误会杀死容器,并且当您运行 docker ps 时您无法看到容器,因为如果出现任何错误,pm2-runtime 将退出 3 次发生。

    双重检查的一种方法是验证,运行docker ps -a并获取容器ID并检查docker logs stopeed_container_id,你会探测到类似的东西

    2019-1-02T20:53:03: PM2 log: 0 application online, retry = 3
    2019-1-02T20:53:05: PM2 log: 0 application online, retry = 2
    2019-1-02T20:53:07: PM2 log: 0 application online, retry = 1
    2019-1-02T20:53:09: PM2 log: 0 application online, retry = 0
    2019-1-02T20:53:09: PM2 log: Stopping app:www id:0
    2019-1-02T20:53:09: PM2 error: app=www id=0 does not have a pid
    2019-1-02T20:53:09: PM2 log: PM2 successfully stopped
    

    因此,即使出现错误,也不要停止容器,我不会推荐此方法,但您可以使用 --no-auto-exit 标志运行。

    --no-auto-exit             
    do not exit if all processes are errored/stopped or 0 apps launched
    

    pm2-runtime option

    CMD pm2-runtime --no-auto-exit app.js
    
    

    【讨论】:

      猜你喜欢
      • 2020-03-18
      • 2015-04-05
      • 1970-01-01
      • 2021-05-29
      • 2019-10-27
      • 1970-01-01
      • 1970-01-01
      • 2011-04-27
      • 1970-01-01
      相关资源
      最近更新 更多