node.js - 使用 pm2 在 Docker 容器中启动两个 nodejs 应用程序

标签 node.js docker dockerfile pm2

我正在尝试使用 PM2 在 Docker 容器中启动 2 个 nodejs 应用程序,因此我使用所有项目配置制作了一个自定义 Dockerfile

FROM node:argon

RUN npm install pm2 -g --silent

VOLUME ./src/app:/usr/src/app
WORKDIR /usr/src/app

RUN git clone https://github.com/yoonic/atlas.git backend
RUN cd backend && \
    npm i --silent && \
    pm2 start npm --name "backend" -- run dev --no-daemon

RUN git clone https://github.com/yoonic/nicistore.git frontend
RUN cd frontend && \
    npm i --silent && \
    sed -i "s#api.atlas.baseUrl#http://localhost:8000/v1#" config/client/development.js && \
    pm2 start npm --name "frontend" -- run dev --no-daemon

我用 docker-compose up 和这个配置启动这个容器

# NodeJS
nodejs:
  build: docker/nodejs
  container_name: nodejs
  ports:
    - 53000:3000
    - 54000:4000

当所有容器都设置好后,我在终端中得到了 PM2 进程列表 然后 docker-compose 启动我所有的容器,但我的 nodejs 一个立即失败

nodejs exited with code 0

我的 nodejs 应用程序在我的容器中运行,但这个应用程序立即退出...

这是完成这项工作的正确方法吗? 可能不需要 PM2?

我怎样才能让它工作?

编辑

当我不使用 --no-daemon 时容器退出,因为它认为一切都已完成。 但是当我使用 --no-daemon 时,构建过程永远不会完成,因为它显示了 nodejs 应用程序日志

最佳答案

使用进程文件来管理这两个应用程序:http://pm2.keymetrics.io/docs/usage/application-declaration/

例如—— 过程.yml:

apps:
  - script : 'npm'
    args   : 'run dev'
    cwd    : './backend'
    name   : 'backend'
  - script : 'npm'
    args   : 'run dev'
    cwd    : './frontend'
    name   : 'frontend'

然后在 Dockerfile 中:

CMD ['pm2-docker', 'process.yml']

有关 PM2/Docker 集成的文档:http://pm2.keymetrics.io/docs/usage/docker-pm2-nodejs/

关于node.js - 使用 pm2 在 Docker 容器中启动两个 nodejs 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41224173/

相关文章:

docker - 在同一主机上运行多个相同的无花果环境

postgresql - 等同于使用 ssh 隧道

docker - Dockerfile 中的桥接网络连接

docker - 使用 pyodbc 将 docker python 连接到 SQL 服务器

node.js - 如何在 Mongoose 中使用 elemMatch 进行查询?

node.js - 异常地方Node.JS异步错误的合理处理方案

image - 更改Route并重建ASP.NET Core Api Controller 后,Docker镜像未更新

node.js - Docker 文件来自 Node :12. 2.0-alpine

node.js - 异步写入文件和 Steam 写入文件有什么区别?

node.js - React - 从 './App.jsx' 导入应用程序