有人知道如何在最新的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。
任何人都知道如何使捆绑安装的缓存正常工作?
干杯, 安德鲁
答案 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
,则可能会更新文件的时间戳,这会使缓存无效。