【发布时间】:2017-09-18 04:32:42
【问题描述】:
使用 compose v3。
在构建中,我复制 package.json 并将 npm install 运行到
/var/www/project/node_modules
我没有在构建阶段添加任何代码。
在撰写中我添加卷
- ./www:/var/www/project/www
众所周知,绑定到 /www 的主机将有效地“覆盖”我在构建阶段安装的 node_modules。
这就是我们之后添加命名模块的原因
- ./www:/var/www/project/www
- modules:/var/www/project/www/node_modules
这在我们第一次构建/运行项目时工作得很好,很漂亮
由于命名卷“模块”不存在,构建阶段的 www/node_modules 将被挂载。
但是,这是实际问题。
下次我对 package.json 进行更改并执行以下操作时:
docker-compose up --build
我可以看到新的 npm 模块是如何安装的,但是一旦附加了命名的“模块”卷(它现在存在上一次运行的东西),它就会“覆盖”映像中新安装的模块。
在很多地方都建议使用上述添加命名卷的方法作为节点模块问题的补救措施。但据我从大量测试中可以看出,这只适用于一次。
如果我每次对 package.json 进行更改时都重命名命名卷,它当然会起作用。
【问题讨论】:
-
曾经丑陋的处理方式是:
docker-compose rm然后docker volume rm named-volume-name然后docker-compose up -
你有想过这个吗?
标签: node.js docker-compose npm-install