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