2014-06-09 58 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 /)也很好 –