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" 更改它。

https://docs.docker.com/docker-for-mac/osxfs-caching/#tuning-with-consistent-cached-and-delegated-configurations

将 watchOptions 添加到 vue.config.js 似乎有所帮助。

vue.config.js

module.exports = {
  devServer: {
    watchOptions: {
      aggregateTimeout: 300,
      poll: 1000,
    },
  },
};

我仍在测试是否可以解决问题。