gulp watch зависает в Docker

Я пытаюсь «докеризировать» нашу среду разработки. У нас есть система сборки gulp, которая отслеживает изменения в наших файлах js/sass/jade. Все это настроено для нормальной работы вне докера.

Я создал док-контейнер и монтирую в него свою кодовую базу (используя том). Все установки предшественника npm и установки Bower завершаются успешно. Мой последний шаг запускает gulp, и он работает правильно и строится, но затем не улавливает никаких последующих изменений ни в одном из наших файлов js/sass/jade.

Я запускаю систему сборки с помощью следующей команды:

docker run -it -v $(pwd):/code/ client gulp reset

У кого-нибудь есть аналогичная настройка в их среде разработки? Что вы сделали, чтобы часы gulp работали и отображали здание?

РЕДАКТИРОВАТЬ: я думаю, что я мог бы выполнять сборку/просмотр gulp вне докера и монтировать только сгенерированные файлы, но я бы предпочел содержать все это внутри докера, чтобы хост-компьютеру не нужно было беспокоиться о каких-либо зависимостях для сборки/запуска наше приложение

EDIT2: вот мой файл докеров и docker-compose.yml

#Dockerfile
FROM node:0.12.5
RUN mkdir /code

WORKDIR /code
RUN mkdir client
WORKDIR client
RUN mkdir .tmp
ADD ./client/package.json /code/client/package.json
ADD ./client/bower.json /code/client/bower.json

RUN npm install gulp -g
RUN npm install bower -g
RUN npm install
RUN npm rebuild node-sass
RUN bower --allow-root install

CMD gulp reset

а также

client:
  build: .
  volumes:
    - .:/code

person John    schedule 03.07.2015    source источник
comment
Взгляните на 10 gulp в хабе registry.hub.docker.com/search ?q=gulp&searchfield=   -  person user2915097    schedule 04.07.2015
comment
@user2915097 user2915097 Я не думаю, что проблема в том, как я создаю образ. я отредактировал исходный пост с моим dockerfile и docker-compose.yml   -  person John    schedule 04.07.2015


Ответы (1)


Мне никогда не удавалось заставить какой-либо наблюдатель за файлами на основе inotify когда-либо работать с гостевыми дополнениями виртуального ящика и на основе этот билет вряд ли появится в ближайшее время. Мой предпочтительный подход заключается в следующем:

  • Предполагая, что мой локальный исходный код находится в /code
  • Запустите мой наблюдатель локально в /code
  • При обнаружении изменения выполните rsync local /code для удаленного /code (подключенного как том только для контейнера) в контейнере.

Пример rsync:

docker run --rm --volumes-from sourcecode my/image \
    rsync \
        --delete \
        --recursive \
        --safe-links \
        --exclude .git  --exclude node_modules  \
    /local/repo/ /container/repo

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

person Abdullah Jibaly    schedule 05.07.2015
comment
Спасибо за ваше предложение! На самом деле у меня есть докер, работающий с gulp watch, пока я использую опцию usePolling: true Однако производительность на самом деле очень низкая. Как вы выполняете rsync из локального в док-контейнер? - person John; 06.07.2015
comment
Да, вы можете опросить, но это ужасно на процессоре, как вы заметили. Я отредактировал ответ, чтобы показать пример rsync. - person Abdullah Jibaly; 07.07.2015