在 docker 容器内重新加载代码。 PM2.5节点

Reload code inside docker container. PM2. Node js

我尝试在 docker 容器中重新加载我的节点 js 应用程序代码。我使用 pm2 作为进程管理器。这是我的配置: Dockerfile

FROM node:6.9.5

LABEL maintainer "denis.ostapenko2@gmail.com"

RUN mkdir -p /usr/src/koa2-app

COPY . /usr/src/koa2-app

WORKDIR /usr/src/koa2-app

RUN npm i -g pm2

RUN npm install

EXPOSE 9000

CMD [ "npm", "run", "production"]

ecosystem.prod.config.json(又名 pm2 配置)

{
  "apps" : [
    {
      "name"        : "koa2-fp",
      "script"      : "./bin/www.js",
      "watch"       : true,
      "merge_logs"  : true,
      "log_date_format": "YYYY-MM-DD HH:mm Z",
      "env": {
        "NODE_ENV": "production",
        "PROTOCOL": "http",
        "APP_PORT": 3000
      },
      "instances": 4,
      "exec_mode"  : "cluster_mode",
      "autorestart": true
    }
  ]
}

docker-compose.yaml

version: "3"
services:
  web:
    build: .
    volumes:
      - ./:/koa2-app
    ports:
      - "3000:3000"

npm 运行 生产 - pm2 开始 --attach ecosystem.prod.config.json

我在 CLI 中 运行 'docker-compose up' 并且它有效,我能够在 localhost:3000 上与我的应用程序交互。但是,如果对代码进行一些更改,它将不会显示在 web 中。如何在 docker 中配置代码重新加载?

P.S。最佳实践问题:使用 docker 东西开发真的可以吗?或者 docker 容器最适合生产使用。

看来你COPY你的代码在一个地方,卷在另一个地方。

尝试:

version: "3"
services:
  web:
    build: .
    volumes:
      - ./:/usr/src/koa2-app
    ports:
      - "3000:3000"

然后,当您更改容器外的 js 代码(您的 IDE),现在 PM2 能够看到更改,因此重新加载应用程序(您需要确定那部分)。

关于在开发环境中使用Docker:这是一个非常好的事情,原因有很多。例如,您为不同的环境管理相同的应用程序安装,减少了很多错误等。