【问题标题】:Angular Docker hot reload not working on windowsAngular Docker 热重载无法在 Windows 上运行
【发布时间】:2026-01-12 19:50:02
【问题描述】:

在 Windows 的 docker 容器中运行新创建的 Angular 应用程序不会在更改时热重载应用程序。 我试过这个Docker container doesn't reload Angular app

但一直失败,如果我创建图像然后运行我得到的容器:

web_1 | npm ERR! enoent ENOENT: no such file or directory, open '/usr/src/app/package.json'

我也尝试关注这篇文章(适用于 Mac 但不适用于 Windows):
Dockerizing an Angular App

我尝试将--poll 添加到我的angular.json

"docker": {
    "poll": 2000
},
  • 这是我的 DockerFile
FROM node:8.11.2

# set working directory
RUN mkdir /usr/src/app
WORKDIR /usr/src/app

# add `/usr/src/app/node_modules/.bin` to $PATH
ENV PATH /usr/src/app/node_modules/.bin:$PATH

COPY package.json /usr/src/app/package.json
RUN npm install
RUN npm install -g @angular/cli@6.1.5

# add app
COPY . /usr/src/app

EXPOSE 4200 49153
# start app
CMD ng serve --port 4200 --host 0.0.0.0 --poll 1

我就是这样运行它的:
docker build -t something-clever .

对于容器:
docker run -it -v C:/Users/test-docker -v /usr/src/app/node_module -p 4200:4200 -p 49153:49153 --rm something-clever bash -c "npm start"

感谢任何帮助。 谢谢你。

【问题讨论】:

  • 我在 Windows 桌面和 docker 上遇到了同样的问题。尝试将--poll 添加到您的ng serve 命令:ng serve --host 0.0.0.0 --port 4256 --configuration hmr --source-map=false --hmr-warning=false --poll 1。 ` --poll 启用并定义文件观察轮询时间,以毫秒为单位。`

标签: angular docker


【解决方案1】:

你拼错了node_modules。你的 docker run 命令有node_module

使用以下命令运行 Docker:
docker run -it -v C:\Users\test-docker:/usr/src/app/node_modules -p 4200:4200 -p 49153:49153 --rm something-clever bash -c "npm start"

Windows 用户可能需要在参数中添加额外的引号:
docker run -it -v "C:\Users\test-docker:/usr/src/app/node_modules" -p 4200:4200 -p 49153:49153 --rm something-clever bash -c "npm start"

【讨论】:

    【解决方案2】:

    你的配置有一些问题,首先我假设你想将C:/Users/test-docker绑定到/usr/src/app/node_module

    如果不是这种情况,您需要将本地项目目录绑定到/usr/src/app/node_module。您可以使用-v <source_dir>:<target_dir> 中所述的语法docs 来执行此操作。

    所以这将导致docker run -it -v C:/Users/test-docker:/usr/src/app/node_module -p 4200:4200 -p 49153:49153 --rm something-clever bash -c "npm start"

    其次,您当前是在构建映像时复制文件,而不是在运行映像时。这意味着当前存在于 docker 映像中的文件将始终保持不变,除非您重新启动它。当您将项目目录直接绑定到容器中时,此步骤将变得过时。

    通过这样做,文件将在您的主机 和 docker 容器内的 上更新。因此,您可以在修复卷挂载后从 docker 文件中删除复制行。

    希望对你有帮助

    【讨论】:

      最近更新 更多