首页 > 解决方案 > Nodemon 不会在我的 docker 容器上重新加载我的 app.js

问题描述

我决定在容器中使用 Express 制作服务器并安装 nodemon 以监视和重新加载我的代码修改,但是由于某种原因,当我修改代码时容器上的 nodemon 不会重新加载。我该如何解决?

我的 Dockerfile:

FROM node:14-alpine

WORKDIR /usr/app

RUN npm install -g nodemon

COPY . .

EXPOSE 3000

CMD ["npm","start"]

我的 package.json:

{
  "name": "prog-web-2",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "nodemon app.js"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/willonf/prog-web-2.git"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "bugs": {
    "url": "https://github.com/willonf/prog-web-2/issues"
  },
  "homepage": "https://github.com/willonf/prog-web-2#readme",
  "dependencies": {
    "express": "^4.17.1"
  }
}

我的 app.js:

const express = require("express")

const app = express()

app.get("/", (req, res) => {
    res.end("Hello, World!")
});

app.listen(3000);

标签: dockerexpressdockerfilecontainersnodemon

解决方案


您正在将所有文件复制到 docker 容器中。

COPY . .

因此,当您修改本地文件时,您并没有修改 docker 容器内的文件,并且 docker 容器内的 nodemon 无法检测到任何更改。

可以使用Docker Volumes获得您想要的行为。您可以配置它们,以便 docker 容器与主机系统共享工作目录。如果您更改主机上的文件,nodemon 将在这种情况下检测到更改。

这篇文章中的答案展示了如何实现这一目标的示例。


推荐阅读