【发布时间】:2019-09-11 01:20:48
【问题描述】:
我在 Visual Studio 2019 中将 docker-compose 与 docker 一起用于运行 linux 容器的 Windows。我想为 Angular 客户端应用启用热重载。
我修改了运行应用程序的 npm 命令以包含如下轮询:
"docker-start": "ng serve --host 0.0.0.0 --port 4200 --proxy-config proxy-conf.json --poll 1"
并像这样在 docker-compose 中添加了一个卷:
volumes:
- ./ClientApp:/app/
还额外暴露了 webpack 端口
ports:
- 4200:4200
- 49153:49153
docker-compose 文件位于 repo 的根目录,而 Angular 应用程序位于 /ClientApp 文件夹中。这使得每次导航到 localhost:4200 时应用程序都无法 GET\。如果我注释掉卷映射,应用程序开始工作,但重新加载没有。我希望它能够在每次更改任何前端代码时监听代码中的更改并根据需要更新容器。
整个 dockerfile:
FROM node:9.6.1
RUN mkdir -p /app
WORKDIR /app
EXPOSE 4200
EXPOSE 49153
ENV PATH /app/node_modules/.bin:$PATH
COPY . /app
RUN npm install --silent
RUN npm rebuild node-sass
CMD ["npm", "run", "docker-start"]
【问题讨论】:
-
你能发布 Dockerfile 或者更好的是你有 GitHub 上的代码吗?我想看看 /app 在有和没有映射的情况下如何变化。
-
@Mihai 谢谢。我无法发布源代码,但我使用客户端应用程序 dockerfile 更新了第一篇文章。
-
我明白了。您的卷实际上正在覆盖在映像的构建阶段完成的所有工作。我正在准备一个可能的解决方案。同时:打开音量,当你得到 GET 错误时,你能看到应用程序日志吗?如果您从容器内部运行相同的程序,它会起作用吗?它不应该,但至少你应该得到一个错误。或者应用程序根本没有启动,在这种情况下你仍然应该得到一个错误。您能否在应用程序日志中发布您可能遇到的任何错误?
标签: angular visual-studio docker docker-compose hot-reload