2017-04-21 58 views
4

使用compose v3。從npm安裝的Docker compose v3 named volume&node_modules

在構建我複製的package.json和運行NPM安裝到

/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時重命名指定的卷,它當然會起作用。

+0

一旦處理得不好的方法是:'docker-compose rm'然後'docker volume rm named-volume-name'然後'docker-compose up' –

+0

你有沒有想過這個? – medv

回答

0

更好的做法是在運行npm install之前在您的入口腳本中包含rm命令以清除節點模塊。

作爲替代方案,您可以在運行另一個版本之前使用$ docker system prune。這將確保沒有早期的東西被使用。