【问题标题】:Reload code inside docker container. PM2. Node js在 docker 容器中重新加载代码。 PM2.节点js
【发布时间】:2017-09-29 08:09:06
【问题描述】:

我尝试在 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 生态系统.prod.config.json

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

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

【问题讨论】:

  • 您是否确认容器中的文件已更新?这里有两个可能的问题。 Docker 没有正确更新文件,或者您的服务器没有检测到更改。您可以使用docker-compose exec web sh 获取外壳并验证文件是否已正确修改。
  • 已检查。 docker 容器内的文件没有更新。

标签: node.js docker pm2


【解决方案1】:

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

试试:

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

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

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

【讨论】:

  • 它对我有用。也感谢您提供最佳实践问题的答案!
  • 我不敢相信我没有看到我的 docker build 工作目录和 compose 挂载目标路径的区别。谢谢。
猜你喜欢
  • 2019-10-31
  • 2019-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-17
  • 2013-06-22
相关资源
最近更新 更多