PM2不会在Docker内部启动
尝试使用docker-compose从Docker中的卷中运行并重新加载节点应用程序。
目标是使应用程序在容器内运行,而不会丢失在容器外编辑/重新加载代码的能力。
我已经通过了PM2的docker集成build议,并使用keymetrics/pm2-docker-alpine:latest
的基础图像。
docker-compose.yml
文件定义了一个简单的Web服务。
version: '2' services: web: build: . ports: - "${HOST_PORT}:${APP_PORT}" volumes: - .:/code
其中使用了一个相当简单的Dockerfile。
FROM keymetrics/pm2-docker-alpine:latest ADD . /code WORKDIR /code RUN npm install CMD ["npm", "start"]
哪个调用npm start
:
{ "start": "pm2-docker process.yml --watch" }
其中指的是process.yml
:
apps: - script: './index.js' name: 'server'
在本地运行npm start
可以很好地工作 – PM2会运行节点进程并监视代码的变化。
但是,只要我试着在容器中运行它,我就会在启动时出现以下错误:
Attaching to app_web_1 web_1 | web_1 | web_1 | [PM2] Spawning PM2 daemon with pm2_home=/root/.pm2 web_1 | [PM2] PM2 Successfully daemonized web_1 | web_1 | error: missing required argument `file|json|stdin|app_name|pm_id' web_1 | app_web_1 exited with code 1
用pm2-docker二进制代码找不到一个好的例子,我不知道为什么pm2-docker
会拒绝工作,特别是当它在正式的pm2-docker-alpine
映像上运行时。
要激活–watch选项,而不是将–watch选项传递给pm2-docker,只需在ymlconfiguration文件中将watch选项设置为true:
apps: - script: './index.js' name: 'server' watch : true