17

我在 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\。如果我注释掉卷映射,应用程序开始工作,但重新加载没有。我希望它能够在每次更改任何前端代码时监听代码中的更改并根据需要更新容器。

整个码头文件:

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"]
4

2 回答 2

5

更改代码时,使用 nodemon 自动重新启动节点服务器。在此之前在您的 docker 映像中安装 nodemon 并确保它存在。

请参考此 URL 安装 nodemon:https ://www.npmjs.com/package/nodemon

然后在 Dockerfile 中更改您的 CMD

CMD ["nodemon", "--exec", "npm", "run", "docker-start"]

这是在代码更改时重新加载您的 nodejs 应用程序

于 2019-05-15T07:29:06.900 回答
2

您可能会在这里遇到几个问题,因为不幸的是 Docker 和 Windows 相处得并不好。

cannot GET\错误绝对是奇怪的,不应该发生。首先,您可能想要验证您的卷是否已正确安装,并且在运行容器后所有数据都在那里。

如果容器内的工作目录为空(可能是这种情况),您可以尝试检查 docker 设置,是否正确共享所需的驱动器。

如果它们是并且您仍然看不到任何您可能想要重置凭据的数据。这需要您向 docker 提供您的 Windows 密码。

码头工人设置

坏消息

坏消息是,根据Docker Docs的说法,显然该inotify事件(用于检测已安装卷上的更改)在 Windows 上还不能与 Docker 一起使用。您可能希望遵循他们关于如何解决该问题的建议。

好消息

幸运的是,有许多项目试图解决您的问题,例如Go-Touch。我自己还没有验证过,但我希望你能从中受益。

于 2019-05-16T19:37:01.530 回答