收听更改并在代码更改时重新加载容器 - 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。我自己还没有验证过,但我希望你能从中受益。
我在 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。我自己还没有验证过,但我希望你能从中受益。