Docker 容器中的热重载在一段时间后停止工作
Hot reloading in Docker container stops working after a while
背景
我们使用 Docker 将 Vue.js 应用程序容器化并使用源代码安装卷。
Docker文件
FROM node:13.8-alpine
RUN yarn install && \
apk add --no-cache git
COPY . /usr/src/app
WORKDIR /usr/src/app
EXPOSE 8080
CMD ['/bin/sh', 'start_compose.sh']
docker-compose.yml
version: '3'
services:
web:
build: .
volumes:
- .:/usr/src/app:delegated
ports:
- '8080:8080'
command: ['/bin/sh', 'start_compose.sh']
start_compose.sh
yarn install
npm rebuild node-sass
yarn serve
问题
热重载一般有效,代码更改通常会立即反映在浏览器中。
但很多时候热重载会在一段时间后停止工作,并且代码更改不会反映在浏览器中。
停止并重新启动容器可暂时解决此问题。
问题
可能是什么原因导致了这个问题,解决方案是什么?
谢谢!
在某些情况下,这比 docker 问题更像是节点问题。当您停止并重新启动容器时,节点正在重新加载...我认为节点重新加载就是再次进行热重新加载。
但是有一些引人注目的安装方式,"delegated"。这可能会导致主机卷(当您编辑代码时)和容器视图之间的不一致。尝试用 "consistent" 更改它。
将 watchOptions 添加到 vue.config.js 似乎有所帮助。
vue.config.js
module.exports = {
devServer: {
watchOptions: {
aggregateTimeout: 300,
poll: 1000,
},
},
};
我仍在测试是否可以解决问题。
背景
我们使用 Docker 将 Vue.js 应用程序容器化并使用源代码安装卷。
Docker文件
FROM node:13.8-alpine
RUN yarn install && \
apk add --no-cache git
COPY . /usr/src/app
WORKDIR /usr/src/app
EXPOSE 8080
CMD ['/bin/sh', 'start_compose.sh']
docker-compose.yml
version: '3'
services:
web:
build: .
volumes:
- .:/usr/src/app:delegated
ports:
- '8080:8080'
command: ['/bin/sh', 'start_compose.sh']
start_compose.sh
yarn install
npm rebuild node-sass
yarn serve
问题
热重载一般有效,代码更改通常会立即反映在浏览器中。
但很多时候热重载会在一段时间后停止工作,并且代码更改不会反映在浏览器中。
停止并重新启动容器可暂时解决此问题。
问题
可能是什么原因导致了这个问题,解决方案是什么?
谢谢!
在某些情况下,这比 docker 问题更像是节点问题。当您停止并重新启动容器时,节点正在重新加载...我认为节点重新加载就是再次进行热重新加载。
但是有一些引人注目的安装方式,"delegated"。这可能会导致主机卷(当您编辑代码时)和容器视图之间的不一致。尝试用 "consistent" 更改它。
将 watchOptions 添加到 vue.config.js 似乎有所帮助。
vue.config.js
module.exports = {
devServer: {
watchOptions: {
aggregateTimeout: 300,
poll: 1000,
},
},
};
我仍在测试是否可以解决问题。