在容器化技术日益普及的今日,Docker 已成为布置 Node.js 服务的常用选择。
同时,PM2 作为一个进程办理工具,也常被用于办理 Node.js 进程。
两者都供给了进程溃散时的主动重启功用。
docker 重启
写个 dockerfile:
FROM node:18-alpine
WORKDIR /app
COPY ./index.js .
CMD ["node", "/app/index.js"]
docker build -t restart-test:v1.0 .
docker run -d --name=restart-test-container restart-test:v1.0
咱们能够在 docker run 的时分经过 –restart 指定重启战略:
docker run -d --restart=always --name=restart-test-container2 restart-test:v1.0
always 总是测验重启容器。

打印了很多次错误日志:

你能够点击停止,就不会再重启了。
–restart 还有一些参数:
-
no:这是默认的重启战略。当容器退出时,不会测验重启它。 -
on-failure::仅在容器非正常退出时主动重启。能够指定重启次数,如on-failure:3表示最多重启三次。 -
unless-stopped:除非手动停止,不然容器总是主动重启。与always类似,但差异在于当 Docker 守护进程重启时,unless-stopped战略的容器不会主动重启。
pm2 重启
新建 pm2.Dockerfile:
FROM node:18-alpine
WORKDIR /app
COPY ./index.js .
RUN npm install -g pm2
CMD ["pm2-runtime", "/app/index.js"]
然后 build 一下,生成镜像:
docker build -t restart-test:v2.0 -f pm2.Dockerfile .
docker run -d --name=restart-test-container3 restart-test:v2.0
这时分会发现容器一直是运转状况,可是内部的进程一直在重启:

也就是说,Docker 的主动重启功用和 PM2 的主动重启功用是重合的。
选择哪个重启
在大多数情况下,使用 Docker 的主动重启功用现已满意满意需求,无需再使用 PM2。特别是当使用容器编列工具(如Kubernetes)时,更倾向于让容器编列工具来办理容器的重启和调度。
如果仅仅 Docker 布置,能够考虑结合 pm2 来做进程的重启,可能会更快点。
docker compose 装备 restart
Docker Compose 是用于同时跑多个 Docker 容器的,它天然也支撑 restart 的装备:

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。




