使用compose v3。
在构建中我复制package.json并运行npm install into
/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。
HOWEVER ,这是实际问题。
下次我对package.json进行更改并执行:
docker-compose up --build
我可以看到新的npm模块是如何安装的,但是一旦附加了命名的“模块”卷(它现在存在于上一次运行中的东西),它“覆盖”图像中新安装的模块。
在大量地方建议添加命名卷的上述方法作为节点模块问题的补救措施。但据我从大量测试中看到,这只能工作一次。
如果每次对package.json进行更改时我都要重命名命名卷,那当然可以。
答案 0 :(得分:0)
更好的方法是在入口点脚本中包含rm
命令,以便在运行npm install
之前清除节点模块。
作为替代方法,您可以在运行其他构建之前使用$ docker system prune
。这将确保没有使用早期的东西。