收听更改并在代码更改时重新加载容器 - docker-compose

Listen to changes and reload container on code change - docker-compose

我在 visual studio 2019 年使用 docker-compose,docker 用于 windows 运行 linux 容器。我想为 angular 客户端应用程序启用热重载。

我修改了 npm 命令 运行 应用程序以包含如下投票:

"docker-start": "ng serve --host 0.0.0.0 --port 4200 --proxy-config proxy-conf.json --poll 1"

并在 docker 中添加了一个卷 - 像这样编写:

volumes:
  - ./ClientApp:/app/

另外还公开了 webpack 端口

ports:
  - 4200:4200
  - 49153:49153

docker-compose 文件位于 repo 的根目录中,angular 应用程序位于 /ClientApp 文件夹中。这使得应用程序在我每次导航到 localhost:4200 时抛出 cannot GET\。如果我注释掉卷映射,应用程序将开始工作,但重新加载不会。我希望它能监听代码的变化,并在每次我更改任何前端代码时根据需要更新容器。

整个docker文件:

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

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

参考这个URL安装nodemon:https://www.npmjs.com/package/nodemon

然后在 Dockerfile 中更改您的 CMD

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

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

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

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

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

如果是,但您仍然看不到任何数据,您可能需要重置您的凭据。这需要您向 docker.

提供 windows 密码

坏消息

坏消息是,根据Docker Docs。您可能需要遵循他们关于如何解决该问题的建议。

好消息

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