2015-07-03 5 views
2

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

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

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

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

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

EDIT: Я думаю, что я мог бы сделать сборку/просмотр gulp вне докеров и только монтировать сгенерированные файлы, но я бы предпочел бы разместить это внутри докера, чтобы хост-машине не нужно было беспокоиться о каких-либо зависимостях строить/запустить наше приложение

edit2: Вот мой dockerfile и докер-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 
+0

Посмотрите на 10 глотков в концентраторе https://registry.hub.docker.com/search?q=gulp&searchfield= – user2915097

+0

@ user2915097 Я не думаю, что проблема заключается в том, как im создает изображение. ive отредактировал оригинальный пост с моим файлом dockerfile и docker-compose.yml – John

ответ

3

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

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

Пример Rsync:

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

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

+0

Спасибо за ваше предложение! Я действительно получил докер, работающий с gulp watch, пока я использую опцию usePolling: true Производительность на самом деле очень плохая. Как вы используете rsync из локального контейнера докера? – John

+0

Да, вы можете опросить, но это ужасно на CPU, как вы заметили. Я отредактировал ответ, чтобы показать пример rsync. –