【发布时间】:2019-11-15 02:03:07
【问题描述】:
我有一个 Node 应用程序,它由三个独立的 Node 服务器组成,每个服务器由 pm2 start 运行。我使用concurrently 运行三个服务器,作为 package.json 中的 start-all 脚本:
"scripts": {
...
"start-all": "concurrently \" pm2 start ./dist/foo.js \" \"pm2 start ./dist/bar.js \" \"pm2 start ./dist/baz.js\"",
"stop-all": "pm2 stop all",
"reload-all": "pm2 reload all",
...
}
当从 localhost 上的命令行运行时,这一切都运行良好,但是当我将它作为 docker-compose 命令运行 - 或作为我的 Dockerfile 中的 RUN 命令运行时 - 只有一个服务器脚本(每个随机一个我试试吧!)将启动,但随后立即退出。在我的--verbose docker-compose 输出中,我可以看到 pm2 面板(列表名称、版本、模式、pid 等),但随后出现以下错误消息:
pm2 start ./dist/foo.js exited with code 0.
注意:这都是 Docker 在本地运行(在具有 16GB RAM 的 Mac Mini 上),而不是在远程服务器上。
如果我 docker exec -it <container_name> /bin/bash 进入容器并从 src 目录的顶层手动运行 npm run start-all(我在我的 Dockerfile 中 COPY )一切正常。这是我的 Dockerfile:
FROM node:latest
# Create the workdir
RUN mkdir /myapp
WORKDIR /myapp
# Install packages
COPY package*.json ./
RUN npm install
# Install pm2 and concurrently globally.
RUN npm install -g pm2
RUN npm install -g concurrently
# Copy source code to the container
COPY . ./
在我的 docker-compose 文件中,我只是将 npm run start-all 列为 Node 服务的命令。但是如果我像这样将它添加到 Dockerfile 中并没有什么区别:
RUN npm run start-all
可能会发生什么? pm2 日志只显示应用程序已启动的报告。
【问题讨论】:
标签: node.js docker docker-compose pm2 concurrently