【问题标题】:Nodemon not refreshing its content within DockerNodemon 未在 Docker 中刷新其内容
【发布时间】:2021-09-29 12:06:42
【问题描述】:

尽管互联网上有很多 Q/A,但我找不到任何可以解决我在 Docker 中运行简单的 express js 应用程序时不会刷新更改的问题。

这是我的Dockerfile

FROM node:16-alpine3.11
WORKDIR /var/be_core
VOLUME /var/be_core
COPY package*.json ./
RUN npm install
COPY . .
CMD ["npm", "start"]

docker-compose.yml

version: '3.9'
volumes:
  be_core_volume:

services:
  be_server_core:
    ports:
      - "9000:3000"
    image: jeko/be_server_core
    environment:
      - BE_SERVER_CORE_PORT=3000
    volumes:
      - "be_core_volume:/var/be_core"

js服务器,很简单:

const express = require('express');
const app = express();

app.get('/', (req, res) => {
    res.send("Hello world");
});

const PORT = process.env.BE_SERVER_CORE_PORT || 3000;

app.listen(PORT, () => {
    console.log(`Core server running on internal port : ${PORT}`);
});

命令 npm start 只需运行它

"scripts": {
        "start": "nodemon -L ./server.js"
}

如果我将服务器作为 独立 进程(不在 docker 容器内)运行,它可以完美运行。 使用命令 docker-compose up - 相反 - 似乎工作正常,因为它启动了所有内容,但是当更改 server.js 文件中的某些内容时,它不会刷新。

我做错了什么?

【问题讨论】:

    标签: docker nodemon


    【解决方案1】:

    您正在使用 Docker 命名卷覆盖您的应用程序代码。

    volumes: 可以挂载两个东西,一个是来自主机系统的目录(bind mount)或由 Docker 管理的存储(named volume)。当冒号左侧的部分只是一个名称时,它正在安装一个命名卷。

    当您将卷挂载到包含映像内容的目录时,命名卷会出现一些奇怪的行为。 仅在第一次运行容器时,映像的内容会复制到卷中。但是,此后每次都优先使用该卷的(旧)内容,即使基础映像已更新。因此,您的设置不仅不会挂载主机目录(因为它是一个命名卷),而且如果您再次docker-compose build,它也会忽略对图像的更改。

    您可以将此volumes: 更改为绑定挂载,您的主机系统的内容将覆盖映像的内容。注意只挂载您的应用程序源代码,而不是您的node_modules 目录。

    version: '3.8'
    # no top-level volumes:
    services:
      be_server_core:
        ...
        volumes:
          - "./src:/var/be_core/src" # note path on left-hand-side
    

    与其试图说服 Docker 模拟本地开发环境,您还可能会发现在日常工作中使用实际的本地开发环境更方便。像往常一样直接在你的主机上运行 Node 和 Nodemon,并只为你的服务的依赖项引入 Docker,然后用于集成测试和部署。你根本不会有 volumes: 块,你的整个应用程序将被构建到图像中。

    【讨论】:

      猜你喜欢
      • 2018-06-27
      • 2020-04-09
      • 2020-01-07
      • 1970-01-01
      • 2012-12-17
      • 2021-03-29
      • 2023-02-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多