< Сильный > Фон

Мы используем Docker для контейнера приложения Vue.js и монтируем том с исходным кодом.

Dockerfile

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

< Сильный > Проблема

Горячая перезагрузка обычно работает, и изменения кода обычно сразу отражаются в браузере.

Но очень часто через некоторое время горячая перезагрузка перестает работать, и изменения кода не отражаются в браузере.

Остановка и перезапуск контейнера устраняет проблему на некоторое время.

< Сильный > Вопрос

Что может быть причиной этой проблемы и каково ее решение?

Спасибо!

0
anti-destin 26 Фев 2020 в 13:28

2 ответа

Лучший ответ

Добавление watchOptions в vue.config.js, кажется, помогает.

Vue.config.js

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

Я все еще проверяю, решает ли это проблему.

0
anti-destin 2 Мар 2020 в 17:32

В некоторых случаях это больше похоже на проблему с узлом, чем на проблему с докером. Когда вы останавливаете и перезапускаете контейнер, узел перезагружается ... Я думаю, что перегрузка узла - это то, что снова выполняет горячие перезагрузки.

Но есть какой-то поразительный способ монтажа, «делегированный». Это может привести к несоответствию между объемом хоста (при редактировании кода) и представлением контейнера. Попробуйте изменить его на «непротиворечивый».

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

0
matiferrigno 26 Фев 2020 в 14:53