2014-06-09 100 views
4

任何人都知道如何在最新的DOCKER發佈中使BUNDLE INSTALL Cache'ing工作? 我試過到目前爲止:Docker Cache BUNDLE INSTALL不能正常工作

1. 
WORKDIR /tmp 
ADD ./Gemfile Gemfile 
ADD ./Gemfile.lock Gemfile.lock 
RUN bundle install 

2. 
ADD . opt/railsapp/ 
WORKIDR opt/rails/app 
RUN bundle install 

他們沒有工作,它仍然運行「邦德安裝」每次從頭Gemfile中不被改變。

任何人都知道如何使緩存捆綁安裝正常工作?

歡呼聲中,0.9.1之前泊塢窗 安德魯

回答

0

版本沒有緩存ADD指令。你可以檢查你是否運行Docker 0.9.1或更高版本?

另外,您正在使用哪種Docker安裝?根據this GitHub issue,有些用戶在使用不受支持的Docker構建時遇到了緩存廢除ADD行爲。確保你使用的是正式的Docker版本。

+0

感謝鏈接,我會看一看。我使用的是最新的LXC-DOCKER軟件包,用於Ubuntu 12.04,它是0.12.0,我知道在0.11.0中有ADD權限的bug,我希望它在0.12中修復,我可以緩存軟件包: – midN

0

ADD緩存基於文件的所有元數據,而不僅僅是內容。

如果您正在運行docker build,並在全新的結帳環境中使用類似CI的環境,則可能會更新文件的時間戳,導致緩存失效。

4

每次更改本地應用程序目錄中的任何文件時,緩存都將被清除,迫使以後的每一步都要重新運行,包括最後的bundle install

解決方法是不要在步驟2中運行bundle install。您已經在步驟1中安裝了寶石,並且Gemfile在步驟1和步驟2之間幾乎沒有變化;-)。

第1步的要點是添加Gemfile,它不應該經常變化,所以你可以在添加應用程序的其餘部分後緩存它和後續的捆綁命令,如果你是仍在開發它。

這裏的Dockerfile怎麼可能是這樣的:

1. 
WORKDIR /tmp 
ADD ./Gemfile Gemfile 
ADD ./Gemfile.lock Gemfile.lock 
RUN bundle install 

2. 
ADD . opt/railsapp/ 
WORKIDR opt/rails/app 
+0

感謝這個答案。在閱讀[本指南](https://blog.abevoelker.com/rails-development-using-docker-and-vagrant/)並在[本頁]中查找差異的更多可視化後,我正在尋求澄清http://kimh.github.io/blog/en/docker/gotchas-in-writing-dockerfile-en/#build_caching_what_invalids_cache_and_not) –

+0

此[博客文章]上更詳細的版本(http://ilikestuffblog.com/2014/01/06/how-to-skip-bundle-install-when-deploy-a-rails-app-to-docker /)也很好 –