【问题标题】:Node.js docker container not updating to changes in volumeNode.js docker 容器没有更新到卷的变化
【发布时间】:2020-08-05 11:54:37
【问题描述】:

我正在尝试在我的 Windows 机器上托管一个开发环境,该环境托管一个前端和后端容器。到目前为止,我只在后端工作。所有文件都在通过 Docker Desktop 共享的 C 盘上。

我有以下 docker-compose 文件和 Dockerfile,后者位于根目录中的一个名为 backend 的目录中。

Dockerfile:

FROM node:12.15.0-alpine

WORKDIR /usr/app

COPY package*.json ./

RUN npm install

EXPOSE 5000

CMD [ "npm", "start" ]

docker-compose.yml:

version: "3"
services:
  backend:
    container_name: backend
    build:
        context: ./backend
        dockerfile: Dockerfile
    volumes:
      - ./backend:/usr/app
    environment:
      - APP_PORT=80
    ports:
      - '5000:5000'

  client:
    container_name: client
    build:
      context: ./client
      dockerfile: Dockerfile
    volumes:
      - ./client:/app
    ports:
      - '80:8080'

由于某种原因,当我在本地文件中进行更改时,它们并没有反映在容器中。我正在通过稍微修改我的一个文件的输出来测试这一点,但我每次都必须重建容器才能看到更改生效。

我以前在 PHP 应用程序中使用过 Docker,并且基本上做过同样的事情。所以我不确定为什么这不适用于 Node.js 应用程序。我想知道我是否只是遗漏了一些显而易见的东西,说明为什么这不起作用。

任何帮助将不胜感激。

【问题讨论】:

  • 你确定你已经在运行的容器中重启了 Node.js 进程吗?
  • 我对使用 Node.js 很陌生。为什么这是必要的?我从来不需要对 PHP 做同样的事情。这是 nodemon 进来的地方吗?
  • 你在找nodemon

标签: node.js docker docker-compose


【解决方案1】:

node 和 PHP 的区别在于 php 会自动拾取请求之间的文件系统更改,但 node 服务器不会。

我想你会看到,如果你通过使用 docker-compose down 然后向上反弹容器来重新启动节点(无需重新构建东西!),文件更改就会被拾取。

如果您希望节点在不需要反弹服务器的情况下获取文件系统更改,您可以使用一些节点工具。 nodemon 是一个:https://www.npmjs.com/package/nodemon。按照安装说明进行本地安装并更新您的启动脚本以使用 nodemon 而不是 node。

另外,我确实认为您的 dockerfile 中有错误,您需要将源代码复制到您的工作目录中。我假设你从这里得到了你的初始食谱:https://dev.to/alex_barashkov/using-docker-for-nodejs-in-development-and-production-3cgp。这是下面的docker文件。你错过了一步!

FROM node:10-alpine

WORKDIR /usr/src/app

COPY package*.json ./
RUN npm install

COPY . .

CMD [ "npm", "start" ]

【讨论】:

  • 为此干杯,所以我尝试安装 nodemon,因为上面的评论也建议。唯一的问题是,如果我 bash 到服务器上,甚至不会收到在 Windows 上进行的文件更改。如果我直接在容器中制作它们,那么 nodemon 正在重新启动应用程序。所以感觉 docker 仍然没有正确更新文件。
  • @JamesPavett 我以前遇到过你的问题。您必须告诉 nodemon 要监视哪些文件。默认值:*.* 在 Docker 中无法正常工作。您可以将要监视的目录设置为启动参数或在 nodemon.json 文件中。
  • 我想你会发现,如果你执行复制步骤,你会在 bash 中看到文件。
  • @RobertMoskal 非常感谢,nodemon 和 COPY 解决了这个问题,并为我解决了一切问题。
  • nodemon --legacy-watch 在你的命令运行中使用这个注释
猜你喜欢
  • 2020-01-21
  • 1970-01-01
  • 2017-01-01
  • 2014-08-08
  • 2023-03-09
  • 2021-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多