npm package.json和docker(mounting it...)

bybem2ql  于 2023-08-06  发布在  Docker
关注(0)|答案(5)|浏览(136)

我正在使用Docker,所以这个案例可能看起来很奇怪。但我希望在开发时将整个/data目录挂载到我的docker容器中。
我的/data文件夹包含我的package.json文件,一个app目录和一堆其他东西。问题是我不希望我的node_modules文件夹是持久的,只有package.json文件。
我已经尝试了几件事,但package.jsonnpm是给我一个艰难的时间在这里。

  • 直接挂载package.json文件会破坏npm。npm尝试在保存时重命名文件,当它是一个挂载的文件时,这是不可能的。
  • 挂载父文件夹(/data)将挂载node_modules文件夹。
  • 我找不到任何配置选项将node_modules放在/data以外的另一个文件夹中,例如/dist
  • package.json放在/data/conf中,将/data/conf挂载为卷是行不通的。我找不到任何方法来指定npmrc中的package.json路径。
  • package.json放在/data/conf中并将其符号链接到/data/package.json不会起作用。npm中断符号链接并将其替换为文件。

在docker容器中来回复制数据就是我现在做的。有点乏味。我也想要一个干净的解决方案。

68de4m5k

68de4m5k1#

正如你已经回答过的,我认为这可能是目前唯一的解决办法。
当你在构建Docker镜像时,做一些类似的事情:

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

字符串
而对于其他的东西(像bower,做同样的事情)

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(所以当data发生变化时,你可以使用Dockers缓存,而不必安装npm/docker。
您还需要创建所需的符号链接并将其存储在git-repo中。它们在外面是无效的,但在你的容器里面会很好地工作。
使用此解决方案,您可以挂载$PWD/data:/data,而不会将npm/bower“垃圾”带到容器外部。您仍然可以将映像构建为服务的独立部署。

jvidinwx

jvidinwx2#

另一种类似的方法是使用NODE_ENV变量,而不是创建符号链接。
第一个月
在这里,首先为node_modules创建一个新目录,将所有模块复制到那里,并让Node从那里读取模块。

kkbh8khc

kkbh8khc3#

我已经有一段时间了这个问题,和公认的解决方案不为我工作 *
我找到了这个link,它有一个编辑指向这里,这确实对我有用:

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

字符串
在这种情况下,引擎会创建一个卷(请参阅volumes上的Compose reference),该卷未挂载到源目录。这是最简单的解决方案,不需要我做任何符号链接,设置路径等。
作为参考,我的简单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


(The watch脚本就是webpack --watch -d
希望这是能够帮助别人,并保存几个小时的时间,就像它为我做的!
'*' =我无法让webpack从我的package.json脚本工作,安装任何东西,而在容器内创建了node_modules文件夹与我刚刚安装的任何东西(我从容器内运行npm i --save [packages],以获得包更新package.json,直到下一次重建)

nc1teljy

nc1teljy4#

我使用的解决方案是将node_modules文件夹放在/dist/node_modules中,并从/data/node_modules创建到它的符号链接。我可以在我的Dockerfile中这样做,以便在构建时使用它,并且我可以将我的符号链接提交给我的git-repo。一切都很顺利。

x9ybnkn6

x9ybnkn65#

也许你可以保存你的容器,然后用一个最小的Dockerfile定期重建它:

FROM my_container

字符串
.dockerignore文件包含:

/data/node_modules


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

相关问题