重新启动以pm2-runtime运行的Node应用程序会导致容器消失,但应用程序仍在运行

时间:2019-12-03 20:38:43

标签: node.js docker pm2

我的NodeJs App已成功部署在Docker容器中。我将此命令放在Dockerfile中:

screen shot of pm2 docs

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

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

这种行为被认为是正常的吗?可以预防吗?

1 个答案:

答案 0 :(得分:0)

这不是预期的行为,可能是同一应用程序在具有相同密钥的主机上运行,​​因此通过发出restart命令可以重新启动两个进程,但是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

相关问题