Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 重新启动使用pm2运行时运行的节点应用程序会导致容器消失,但应用程序仍在运行_Node.js_Docker_Pm2 - Fatal编程技术网

Node.js 重新启动使用pm2运行时运行的节点应用程序会导致容器消失,但应用程序仍在运行

Node.js 重新启动使用pm2运行时运行的节点应用程序会导致容器消失,但应用程序仍在运行,node.js,docker,pm2,Node.js,Docker,Pm2,我的NodeJs应用程序已成功部署在Docker容器中。我将此命令放在Dockerfile中: CMD ["pm2-runtime", "app.js"] 从PM2 key metrics面板重新启动应用程序后,容器docker ps没有显示任何内容,但奇怪的是,应用程序一直在运行。几分钟后,我发现pm2在服务器上全局运行。pm2 ls显示应用程序流程 这种行为正常吗?这是可以防止的吗?这不是预期的情况,可能存在相同的应用程序使用相同的密钥在主机上运行的情况,因此通过发出重新启动命令可以重新启

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

CMD ["pm2-runtime", "app.js"]
从PM2 key metrics面板重新启动应用程序后,容器docker ps没有显示任何内容,但奇怪的是,应用程序一直在运行。几分钟后,我发现pm2在服务器上全局运行。pm2 ls显示应用程序流程


这种行为正常吗?这是可以防止的吗?

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

我假设,在从仪表板重新启动后,出现了一些错误,导致容器失效,并且在运行docker ps时无法看到容器,因为如果出现任何错误,pm2运行时将退出3次

双重检查的一种方法是验证、运行docker ps-a并获取容器id,然后检查docker日志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
所以在这个behour to do not stopped容器之外,即使有错误,我也不推荐这种方法,但您可以使用-no auto exit标志运行

--no-auto-exit             
do not exit if all processes are errored/stopped or 0 apps launched
CMD pm2-runtime --no-auto-exit app.js