小编M F*_*rtz的帖子

Docker buildkit `RUN mount=type=cache` 缓存 ruby​​ 包安装结果的意外行为

我正在尝试使用 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 …

build docker

5
推荐指数
1
解决办法
3238
查看次数

标签 统计

build ×1

docker ×1