我应该在(Docker)容器中永远使用/ pm2吗?

我正在重构一些node.js服务。 他们都曾经在虚拟服务器上forever开始,如果进程崩溃,他们只是重新启动。

现在,转向容器化和无状态的应用程序结构,我认为这个过程应该退出,容器应该在失败时重新启动。

那是对的吗? 有好处还是坏处?

我的意思是不要使用容器内进程pipe理器(永远,pm2),而是通过--restart=always (或该选项的其他风格之一)使用--restart=always restart策略。 这更符合总体docker理念,因为docker集装箱开始运行的速度非常快,所以在集装箱内的过程监督方面应该非常类似。

如果您想了解关于此主题的其他立场,我所见过的运行集装箱内stream程监督的最有力的倡导者是在“ 基础图像 – docker”一书中 。

尽pipe使用--restart=always作为故障安全是一个好主意,但是容器重启相对较慢(使用这里描述的简单的Hello World节点服务器需要5秒以上),所以您可以使用像forever一样的东西来最小化应用程序停机时间。

在容器中重新启动进程的一个缺点是,崩溃恢复现在可能发生在两个方面,这可能会影响到您的监控等。