【问题标题】:nodemon not restarting server on code change in docker containernodemon 没有在 docker 容器中的代码更改时重新启动服务器
【发布时间】:2020-06-23 06:25:29
【问题描述】:

我在 docker 容器中运行我的 node.js 应用程序,并且 nodemon 不会在更改时重新加载。 这是我的 dockerfile:

WORKDIR /app
COPY package*.json ./

RUN yarn install
COPY . /app

EXPOSE 8080
CMD ["yarn", "dev"] 

我正在使用以下命令构建图像:

docker image build -t test7 .

然后运行它:

docker run -it -v "$(pwd)/app:/app/target_dir" test7 bash

我在容器内做yarn dev,它启动服务器一次,但没有重新加载。

这是 package.json 文件:

    "name": "self-learning",
      "version": "1.0.0",
      "main": "index.js",
      "license": "MIT",
      "scripts": {
        "start": "node index.js",
        "dev": "nodemon --legacy-watch index.js"
      },
      "dependencies": {
        "cors": "^2.8.5",
        "express": "^4.17.1",
        "express-winston": "^4.0.3",
        "multer": "^1.4.2",
        "nodemon": "^2.0.2",
        "pg": "^7.18.2",
        "winston": "^3.2.1"
      }
    }

有什么办法可以解决吗?如何在不重建容器的情况下查看更改?

【问题讨论】:

  • 在容器中手动重启进程是否有效?
  • 容器中index.js的完整路径是什么?与 index.js 位于同一文件夹中的所有与 Node.js 脚本相关的内容,还是有任何“外部”文件?
  • 如果你只是在你的主机上运行yarn dev,在 Docker 之外,它可以工作吗?您希望在容器中工作的环境中缺少什么?
  • @DanieleMolinari index.js 位于主文件夹(与 package.json 相同的文件夹)
  • 是的,本地 docker 容器外一切正常

标签: node.js docker nodemon


【解决方案1】:

我认为,您需要包含一个 ENTRYPOINT 指令。对我来说,更改 ENTRYPOINT 指令有效。首先它不起作用,但是当我包含 --legacy-watch 标志时,它开始起作用了。

从以下更改 ENTRYPOINT

ENTRYPOINT [ "nodemon", "--inspect=0.0.0.0","./src/server.js" ]

ENTRYPOINT [ "nodemon", "--legacy-watch", "--inspect=0.0.0.0", "./src/server.js"]

我的完整 docker 文件如下。它是一个多目标 docker 文件。

FROM node:alpine as debug

WORKDIR /work/

COPY ./package.json /work/package.json
RUN npm install
RUN npm install -g nodemon

COPY ./ /work/src/

#ENTRYPOINT [ "nodemon", "--inspect=0.0.0.0","./src/server.js" ]
ENTRYPOINT [ "nodemon", "--legacy-watch", "--inspect=0.0.0.0", "./src/server.js"]

FROM node:alpine as prod

WORKDIR /work/
COPY ./package.json /work/package.json
RUN npm install
COPY ./ /work/

CMD node .

【讨论】:

    【解决方案2】:

    我觉得你已经这样跑了

    docker run -it -v "$(pwd)/app:/app" test7
    

    因为您将所有文件复制到 /app 目录而不是 /app/target_dir

    【讨论】:

      猜你喜欢
      • 2016-10-04
      • 2020-04-09
      • 2015-12-22
      • 2016-03-09
      • 2020-08-21
      • 1970-01-01
      • 2020-07-11
      • 2021-03-04
      • 2019-02-13
      相关资源
      最近更新 更多