我正在为我的 Node.js 应用程序的开发环境制作一个 docker 镜像。运行 docker 镜像时,会挂载一个卷,以便我的应用程序的源代码与主机中的容器共享。我遇到的问题是,与大多数 Node.js 项目不同,我将 node_modules/ 置于版本控制之下(如这里建议的那样http://www.futurealoof.com/posts/nodemodules-in-git.html)。
我需要在构建期间使用 ADD 将 node_modules/ 目录注入容器以构建二进制模块,然后在挂载卷后以某种方式让我的应用程序在 docker 容器运行期间使用它们。
# 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
答案1
您可以轻松地将您的工作目录设置为(即)/app,将您的卷挂载到容器内的/app,然后从那里运行 npm rebuild,对吗?