Node.js docker 容器未更新以适应卷的变化

标签 node.js docker docker-compose

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

我有以下 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'

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

我之前曾在 PHP 应用程序中使用过 Docker,并且基本上做过相同的事情。所以我不确定为什么 Node.js 应用程序不能使用它。我想知道我是否只是错过了一些明显的东西来说明为什么这不起作用。

如有任何帮助,我们将不胜感激。

最佳答案

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

我认为,如果您通过使用 docker-compose 向下然后向上弹起容器来重新启动 Node ,您会看到文件更改被拾取(无需重建内容!)。

如果您希望 Node 拾取文件系统更改而不需要反弹服务器,您可以使用一些 Node 工具。 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" ]

关于Node.js docker 容器未更新以适应卷的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60192208/

相关文章:

node.js - 如何在 Typescript 中启用 NodeJS 和 ExpressJs

node.js - 是什么导致 "MongoError: no mongos proxy available at Timeout"?

javascript - Node.js 中的并行函数调用

nginx - 使用 "allow"指令限制对 nginx 服务器位置的访问到特定的 Docker 容器

django - Docker-Compose 工作流,docker-compose down?

javascript - Node.js:_.chain 下划线中的异步回调

Docker:容器运行在某个端口?

使用 -it 选项时 Docker 容器退出

docker - 如何将Kong部署到docker swarm?

docker - 添加主机或 extra_host 不适用于 Windows 容器