npm package.json和docker(安装它…)

我正在使用Docker,所以这种情况可能看起来很奇怪。 但是我希望我的整个/data目录被安装在我的docker容器里面。

我的/data文件夹容器我的package.json文件,一个app目录和一堆其他的东西。 问题是,我希望我的node_modules文件夹不是持久的,只有package.json文件。

我已经尝试了一些东西,但package.jsonnpm在这里给我一个很难的时间…

  • 直接挂载package.json文件会破坏npm。 npm尝试在保存时重命名文件,这是挂载文件时不可能的。
  • 挂载父文件夹( /data )将挂载node_modules文件夹。
  • 我找不到任何configuration选项将node_modules放置在/data ,example /dist之外的另一个文件夹中
  • package.json放在/data/conf/data/conf挂载为一个卷,而不会工作。 我不能find任何方式来指定npmrcpackage.jsonpath。
  • package.json放在/data/conf并将其/data/package.json/data/package.json无法正常工作。 npm打破了符号链接,并用文件replace它。

从Docker容器中来回复制数据是我现在正在做的事情..有点乏味..我也想要一个干净的解决scheme..

正如你已经回答,我认为这可能是目前唯一的解决scheme。

在构buildDocker镜像时,请执行以下操作:

 COPY data/package.json /data/ RUN mkdir /dist/node_modules && ln -s /dist/node_modules /data/node_modules && cd /data && npm install 

而对于其他的东西(如凉亭,做同样的事情)

 COPY data/.bowerrc /data/ COPY data/bower.json /data/ RUN mkdir /dist/vendor && ln -s /dist/vendor /data/vendor && cd /data && bower install --allow-root 

最后COPY data/ /data (这样您就可以使用Dockerscaching,而不必在data发生变化时执行npm / docker安装。

您还需要创build您需要的符号链接并将它们存储在您的git-repo中。 它们在外面是无效的,但是在你的容器内部会发生作用。

使用这个解决scheme,你可以挂载你的$PWD/data:/data而不会在你的容器外面获得npm / bower“垃圾”。 而且您仍然可以将您的图像作为您的服务的独立部署来构build。

一个类似的替代方法是使用NODE_ENVvariables而不是创build一个符号链接。

RUN mkdir -p /dist/node_modules RUN cp -r node_modules/* /dist/node_modules/ ENV NODE_PATH /dist/node_modules

在这里,您首先为node_modules创build一个新目录,复制所有模块,然后让Node从这里读取模块。

我已经有一段时间了这个问题,而接受的解决scheme不适合我*

我发现这个链接 ,这里有一个编辑指向,这确实为我工作:

 volumes: - ./:/data - /data/node_modules 

在这种情况下,引擎会创build一个卷(请参阅卷上的撰写参考 ),该volumes未装载到您的源目录中。 这是最简单的解决scheme,并不需要我做任何符号链接,设置path等。

作为参考,我简单的Dockerfile看起来像这样:

 # install node requirements WORKDIR /data COPY ./package.json ./package.json RUN npm install -qq # add source code COPY ./ ./ # run watch script CMD npm run watch 

watch脚本只是webpack --watch -d

希望这能够帮助别人,并为我节省数小时的时间!


'*'=我不能让我的package.json脚本的webpack工作,并安装任何东西,而在容器内创buildnode_modules文件夹与我刚刚安装(我运行npm i --save [packages]从容器内得到包更新package.json直到下一次重build)

我使用的解决scheme是将node_modules文件夹放在/dist/node_modules ,并从/data/node_modulesbuild立一个符号链接。 我可以在我的Dockerfile中做到这一点,所以它会在构build时使用它,我可以提交我的符号链接到我的git回购。 一切都很好。

也许你可以保存你的容器,然后用最小的dockerfile定期重build它

FROM my_container

和一个.dockerignore文件包含

/数据/ node_modules

请参阅文档http://docs.docker.com/reference/builder/#the-dockerignore-file