Docker Cache BUNDLE INSTALL无法正常工作

时间:2014-06-09 13:24:13

标签: ruby-on-rails bundler docker

有人知道如何在最新的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。

任何人都知道如何使捆绑安装的缓存正常工作?

干杯, 安德鲁

3 个答案:

答案 0 :(得分:4)

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

解决办法是在步骤2中不运行bundle install。您已在步骤1中安装了宝石,并且Gemfile在步骤1和步骤2之间几乎没有变化; - )。

第1步的重点是添加你的Gemfile,它不应该经常更改,所以你可以在添加你的应用程序的其余部分之前缓存它和后续的bundle命令,如果你仍然可能会经常更改发展它。

以下是Dockerfile的外观:

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

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

答案 1 :(得分:0)

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

另外,您使用的是Docker的哪个安装?根据{{​​3}},一些用户在使用不支持的Docker构建时遇到了缓存破坏ADD行为。确保您使用的是官方Docker版本。

答案 2 :(得分:0)

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

如果您在类似CI的环境中使用新签出运行docker build,则可能会更新文件的时间戳,这会使缓存无效。