在docker容器中重新加载代码。 PM2。节点js

时间:2017-05-01 21:53:55

标签: node.js docker pm2

我尝试在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
    }
  ]
}

搬运工-compose.yaml

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

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

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

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

1 个答案:

答案 0 :(得分:2)

您似乎在一个地方COPY了您的代码,并且该卷位于另一个地方。

尝试:

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

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

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