Node.js docker 容器不会随着体积的变化而更新

Jam*_*ett 7 node.js docker docker-compose

我正在尝试在托管前端和后端容器的 Windows 机器上托管开发环境。到目前为止,我只在后端工作。所有文件都在通过 Docker 桌面共享的 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" ]
Run Code Online (Sandbox Code Playgroud)

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'
Run Code Online (Sandbox Code Playgroud)

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

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

任何帮助,将不胜感激。

Rob*_*kal 7

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

我认为如果您通过使用 docker-compose down 然后 up 弹跳容器来重新启动 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" ]
Run Code Online (Sandbox Code Playgroud)