Я работаю над образом докера для среды разработки для моего приложения Node.js. При запуске образа докера подключается том, так что исходный код моего приложения совместно используется с контейнером с хоста. Проблема, с которой я столкнулся, заключается в том, что, в отличие от большинства проектов Node.js, я держу node_modules / под контролем версий (как рекомендуется здесь http://www.futurealoof.com/posts/nodemodules-in-git.html).
Мне нужно вставить каталог node_modules / в контейнер во время сборки с помощью ADD для сборки двоичных модулей, а затем каким-то образом заставить мое приложение использовать их во время работы контейнера докеров после того, как том был смонтирован.
# Docker official ubuntu 12.04 LTS
FROM ubuntu:12.04
# See: https://launchpad.net/~chris-lea/+archive/node.js/
ENV NODEJS_VERSION 0.10.29-1chl1~precise1
# add updated node.js defacto official repository
RUN apt-get update
RUN apt-get install --yes python-software-properties
RUN add-apt-repository ppa:chris-lea/node.js
# install node.js
RUN apt-get update
RUN apt-get install --yes nodejs=${NODEJS_VERSION}
# install other dependencies via apt...
# copy files to temp directory and rebuild binary node.js modules
ADD ./node_modules /tmp/web/
WORKDIR /tmp/web
RUN npm rebuild
# expose port for app and start it
EXPOSE 5900
WORKDIR /app
# HELP: better way than copying here?
CMD cp -r /tmp/web/node_modules . && ./node_modules/.bin/forever \
--watch app.js
Вы могли бы так же легко установить свой рабочий каталог в (т.е.) / app, смонтировать свой том в / app внутри контейнера, запустить npm rebuild оттуда, верно?