Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js PM2韩元';不要在Docker内部启动_Node.js_Docker_Docker Compose_Pm2 - Fatal编程技术网

Node.js PM2韩元';不要在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

尝试使用docker compose从docker内的卷运行并重新加载节点应用程序

目标是让应用程序在容器内运行,而不会失去在容器外编辑/重新加载代码的能力。

我已经通过并使用了
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