我正在尝试使用 docker 的 buildkit 来缓存构建之间的捆绑安装的结果。我正在使用新的 RUNmount=type-cache...选项来允许缓存后续构建的绑定结果。然而,似乎没有任何内容被缓存。
我使用 docker 19.03.01 作为 docker 客户端和服务器。我已在构建 vie envar 上启用了 buildkitDOCKER_BUILDKIT=1请注意,ssh 挂载似乎有效,但缓存挂载无效。我的 Dockerfile 中有这些行来运行捆绑器
# syntax=docker/dockerfile:experimental
FROM ruby:2.4.6
ENV BUNDLE_PATH=/bundler
RUN gem install bundle
RUN mkdir /app && mkdir /bundler
ADD . /app
WORKDIR /app
ENV BUNDLE_PATH=/bundler
RUN mount=type=cache,target=/bundler ls -la /bundler/cache; bundle install
Run Code Online (Sandbox Code Playgroud)
项目目录只能包含一个 Gemfile(称为Gemfile),其中包含以下内容:
source "https://rubygems.org"
gem "humanize"
gem "i18n"
gem "rake"
Run Code Online (Sandbox Code Playgroud)
我运行构建如下:
DOCKER_BUILDKIT=1 docker build . --progress=plain
Run Code Online (Sandbox Code Playgroud)
第一次运行时,列表尝试/bundler/cache按预期失败,并且捆绑器运行。运行容器会验证所有内容是否按预期安装在 /bundler 下。
但是,如果 gemfile 发生更改,再次运行 docker …