如何重用 `运行 --mount=type=cache` docker 构建中的缓存?

How do I reuse the cache from a `RUN --mount=type=cache` docker build?

我正在使用新的实验性 docker buildkit 语法进行多阶段构建,如下所示:

Docker 文件:

RUN --mount=type=cache,target=/home/build/.build-cache,gid=1000,uid=1001 ./build

bash:

DOCKER_BUILDKIT=1 docker build .

在本地效果很好。在 CI 我每次都会得到一个新的 docker 环境,所以没有缓存。

我可以将文件导出和导入到环境中,但我不知道缓存位于何处。有什么想法吗?

或者我应该通过某些 docker 命令成为 exporting/importing 缓存?我读过 https://docs.docker.com/engine/reference/commandline/build/#specifying-external-cache-sources and https://github.com/moby/buildkit#export-cache 但我不清楚哪个是特定于 buildkit 的,哪个是特定于 docker 的,或者是否确实适用于安装到 Dockerfile 运行 命令中的缓存。

我在这里添加了一个 public 失败测试的要点,展示了我所希望的: https://gist.github.com/Mahoney/85e8549892e0ae5bb86ce85339db1a71/6308f1bdb062a8982017193b96d61ec00a7698c5

此后的修订版有效,但我对此不满意 - 自举太多: https://gist.github.com/Mahoney/85e8549892e0ae5bb86ce85339db1a71

似乎没有任何方法可以从一般 docker 工作文件中提取此特定缓存。

但是,您当然可以备份整个 /var/lib/docker。这不适用于 CircleCI 的远程 docker 引擎,因为您没有 sudo 访问权限,但确实适用于您执行的 GitHub 操作。

示例见此处: https://github.com/Mahoney-playground/docker-cache-action