Прослушайте изменения и перезагрузите контейнер при изменении кода - docker-compose - PullRequest
7 голосов
/ 21 апреля 2019

Я использую docker-compose в visual studio 2019 с докером для окон, работающих под Linux-контейнерами. Я хочу включить горячую перезагрузку для углового клиентского приложения.

Я изменил команду npm, запустив приложение, чтобы включить опрос вроде:

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

и добавил том в docker-compose примерно так:

volumes:
  - ./ClientApp:/app/

также дополнительно открывает порт веб-пакета

ports:
  - 4200:4200
  - 49153:49153

Файл docker-compose находится в корне репозитория, а угловое приложение находится в папке / ClientApp. Это приводит к тому, что приложение throw не может получить \ каждый раз, когда я перехожу на localhost: 4200. Если я закомментирую сопоставление тома, приложение начнет работать, а перезагрузка - нет. Мне бы хотелось, чтобы он прослушивал изменения в коде и обновлял контейнер по мере необходимости каждый раз, когда меняю любой код внешнего интерфейса.

Весь докер-файл:

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

Ответы [ 2 ]

1 голос
/ 16 мая 2019

Вы можете столкнуться с несколькими проблемами здесь, поскольку, к сожалению, Docker и Windows не очень хорошо ладят друг с другом.

Ошибка cannot GET\ определенно странная и не должна возникать.Сначала вы можете убедиться, что ваш том был смонтирован правильно и все данные есть после запуска контейнера.

Если рабочий каталог внутри вашего контейнера пуст (что может быть так), вы можете попробовать проверить вашНастройки докера, правильно ли разделены необходимые диски.

Если они есть, и вы все еще не видите никаких данных, которые могут потребоваться для сброса учетных данных.Это требует, чтобы вы предоставили свой пароль Windows для докера.

Docker Settings

Плохие новости

Плохие новостив том, что, по словам Docker Docs , очевидно, что событие inotify (которое используется для обнаружения изменений на подключенных томах) еще не работает с Docker в Windows.Возможно, вы захотите следовать их рекомендациям о том, как обойти эту проблему.

Хорошие новости

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

1 голос
/ 15 мая 2019

Используйте nodemon для автоматического перезапуска сервера узлов при изменении кода. Перед этим установите nodemon в свой образ докера и убедитесь, что он присутствует.

Для установки nodemon обратитесь по этому URL: https://www.npmjs.com/package/nodemon

затем измените CMD в Dockerfile

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

Это перезагружает ваше приложение nodejs при каждом изменении кодов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...