Node.js PM2韩元';不要在Docker内部启动
尝试使用docker compose从docker内的卷运行并重新加载节点应用程序 目标是让应用程序在容器内运行,而不会失去在容器外编辑/重新加载代码的能力。 我已经通过并使用了Node.js PM2韩元';不要在Docker内部启动,node.js,docker,docker-compose,pm2,Node.js,Docker,Docker Compose,Pm2,尝试使用docker compose从docker内的卷运行并重新加载节点应用程序 目标是让应用程序在容器内运行,而不会失去在容器外编辑/重新加载代码的能力。 我已经通过并使用了keymetrics/pm2-docker-alpine:latest作为基本图像 docker compose.yml文件定义了一个简单的web服务 version: '2' services: web: build: . ports: - "${HOST_PORT}:${APP_POR
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"
}
它指的是进程.yml
:
apps:
- script: './index.js'
name: 'server'
运行npm start
local works fine-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二进制文件的hello world的好例子,我也不知道为什么pm2 docker
会拒绝工作,特别是当它运行在官方的pm2 docker alpine
图像上方时。要激活--watch选项,而不是将--watch选项传递给pm2 docker,只需在yml配置文件中将watch选项设置为true:
apps:
- script: './index.js'
name: 'server'
watch : true
也许可以帮助你。@Sryther谢谢,但这个问题是PM2特有的。我可以让Nodemon在docker中运行并重新加载,但这对开发来说是非常好的。你能试着在Dockerfile中使用
CMD[“pm2 docker”,“process.yml”,“--watch”]
并在进程.yml
中将脚本的值改为index.js'
,而不是。/index.js'
?只是为了test@Sryther已经尝试了这两种方法,结果相同。谢谢@Unitech!问了之后,我在开发时切换到使用pm2 dev。在容器内部开发时,您是否建议使用pm2 docker
和watch:true
来代替?是的,完全正确,在开发时使用pm2 dev(默认情况下启用了watch),并且在准备装运容器时使用pm2 docker