我正在使用Docker,所以这个案例可能看起来很奇怪。但我希望在开发时将整个/data
目录挂载到我的docker容器中。
我的/data
文件夹包含我的package.json
文件,一个app
目录和一堆其他东西。问题是我不希望我的node_modules
文件夹是持久的,只有package.json
文件。
我已经尝试了几件事,但package.json
和npm
是给我一个艰难的时间在这里。
- 直接挂载
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容器中来回复制数据就是我现在做的。有点乏味。我也想要一个干净的解决方案。
5条答案
按热度按时间68de4m5k1#
正如你已经回答过的,我认为这可能是目前唯一的解决办法。
当你在构建Docker镜像时,做一些类似的事情:
字符串
而对于其他的东西(像bower,做同样的事情)
型
最后是
COPY data/ /data
(所以当data
发生变化时,你可以使用Dockers缓存,而不必安装npm/docker。您还需要创建所需的符号链接并将其存储在git-repo中。它们在外面是无效的,但在你的容器里面会很好地工作。
使用此解决方案,您可以挂载
$PWD/data:/data
,而不会将npm/bower“垃圾”带到容器外部。您仍然可以将映像构建为服务的独立部署。jvidinwx2#
另一种类似的方法是使用NODE_ENV变量,而不是创建符号链接。
第一个月
在这里,首先为node_modules创建一个新目录,将所有模块复制到那里,并让Node从那里读取模块。
kkbh8khc3#
我已经有一段时间了这个问题,和公认的解决方案不为我工作 *
我找到了这个link,它有一个编辑指向这里,这确实对我有用:
字符串
在这种情况下,引擎会创建一个卷(请参阅
volumes
上的Compose reference),该卷未挂载到源目录。这是最简单的解决方案,不需要我做任何符号链接,设置路径等。作为参考,我的简单Dockerfile看起来像这样:
型
(The
watch
脚本就是webpack --watch -d
)希望这是能够帮助别人,并保存几个小时的时间,就像它为我做的!
'*' =我无法让
webpack
从我的package.json
脚本工作,安装任何东西,而在容器内创建了node_modules
文件夹与我刚刚安装的任何东西(我从容器内运行npm i --save [packages]
,以获得包更新package.json
,直到下一次重建)nc1teljy4#
我使用的解决方案是将node_modules文件夹放在
/dist/node_modules
中,并从/data/node_modules
创建到它的符号链接。我可以在我的Dockerfile中这样做,以便在构建时使用它,并且我可以将我的符号链接提交给我的git-repo。一切都很顺利。x9ybnkn65#
也许你可以保存你的容器,然后用一个最小的Dockerfile定期重建它:
字符串
.dockerignore
文件包含:型
参见文档:http://docs.docker.com/reference/builder/#the-dockerignore-file