Docker从npm install中编写名为volume&node_modules的v3

使用撰写v3。

在构build我复制package.json并运行npm安装到

/var/www/project/node_modules 

我不添加任何代码在构build阶段。

在撰写我添加卷

 - ./www:/var/www/project/www 

众所周知,绑定到/ www的主机将有效地“覆盖”我在构build阶段安装的node_modules。

这就是为什么我们之后添加一个命名模块的原因

 - ./www:/var/www/project/www - modules:/var/www/project/www/node_modules 

这是我们第一次build设/运行项目时的正常工作

由于命名卷“模块”不存在,所以构build阶段的www / node_modules将被挂载。

但是 ,这是实际的问题。

下一次我对package.json进行更改并执行以下操作:

 docker-compose up --build 

我可以看到新的npm模块是如何安装的,但是一旦连接了命名的“模块”卷(它现在存在上一次运行的东西),就会“覆盖”图像中新安装的模块。

上述添加一个命名卷的方法被build议在大量的地方作为节点模块问题的补救。 但据我所知,从很多testing中只能看到一次。

如果我每次更改package.json时都要重命名这个卷,那当然会起作用。

更好的做法是在运行npm install之前,在入口脚本中包含rm命令以清除节点模块。

作为替代scheme,您可以在运行另一个版本之前使用$ docker system prune 。 这将确保没有早期的事情被使用。