【问题标题】:Docker Cache BUNDLE INSTALL not workingDocker Cache BUNDLE INSTALL 不起作用
【发布时间】:2014-06-09 13:24:12
【问题描述】:

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

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

干杯, 安德鲁

【问题讨论】:

    标签: ruby-on-rails bundler docker


    【解决方案1】:

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

    解决方案是不要在第 2 步中运行 bundle install。您已经在第 1 步中安装了 gem,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
    

    【讨论】:

    • 感谢您的回答。在阅读this guide 并在this page 中找到更多可视化的差异后,我正在寻求澄清@
    • 这个blog post的更详细的版本也不错
    【解决方案2】:

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

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

    【讨论】:

    • 感谢链接,我去看看。我正在为 ubuntu 12.04 使用最新的 LXC-DOCKER 包,即 0.12.0,我知道在 0.11.0 中有 ADD 权限的错误,我希望它在 0.12 中得到修复,我将能够缓存捆绑:
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-05
      • 2014-01-16
      • 2022-01-19
      • 2016-08-28
      相关资源
      最近更新 更多