+-
node.js – 使用pm2在Docker容器中启动两个nodejs app
我正在尝试使用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/

例如 –
process.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 app - 乐贴网