Docker Cache BUNDLE INSTALL无法正常工作

任何人都知道如何使最新的DOCKER版本中的BUNDLE INSTALL Cache'ing工作? 我已经尝试了迄今为止:

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 

没有一个工作,它仍然运行“BUNDE INSTALL”每次从头开始没有Gemfile被改变。

任何人都知道如何使caching捆绑安装正确工作?

干杯,安德鲁

每次更改本地应用程序目录中的任何文件时,caching都将被清除,强制每个步骤重新运行,包括最后一个bundle install

解决方法是不要在步骤2中运行bundle install 。您已经在步骤1中安装了gem,并且在步骤1和步骤2之间几乎没有机会改变Gemfile ;-)。

第一步的要点是添加你的Gemfile,这个不应该经常改变,所以你可以在添加你的应用程序的其余部分之前caching它和随后的bundle命令,如果你还在开发它,这个可能会经常改变。

以下是Dockerfile的外观:

 1. WORKDIR /tmp ADD ./Gemfile Gemfile ADD ./Gemfile.lock Gemfile.lock RUN bundle install 2. ADD . opt/railsapp/ WORKIDR opt/rails/app 

0.9.1之前的Docker版本没有cachingADD指令。 你能检查你运行的是Docker 0.9.1或更高版本吗?

另外,你正在使用哪个Docker安装? 根据这个GitHub问题 ,一些用户在使用不受支持的Docker构build时,遇到了cache-busting ADD行为。 确保你使用的是官方的Docker版本。

ADDcaching基于文件的所有元数据,而不仅仅是内容。

如果您正在使用新签出的CI类环境中运行docker build ,则可能正在更新文件的时间戳,从而导致caching失效。