docker - 如何重用 `RUN --mount=type=cache` docker build 中的缓存?

标签 docker dockerfile docker-buildkit

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

Dockerfile:

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

重击:

DOCKER_BUILDKIT=1 docker build .

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

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

或者我应该通过一些 docker 命令导出/导入缓存?我已阅读 https://docs.docker.com/engine/reference/commandline/build/#specifying-external-cache-sourceshttps://github.com/moby/buildkit#export-cache但我不清楚哪个是特定于 buildkit 的,哪个是特定于 docker 的,或者是否真的适用于安装到 Dockerfile RUN 命令中的缓存。

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

这个后来的修订有效,但我不满意 - 太多的引导:
https://gist.github.com/Mahoney/85e8549892e0ae5bb86ce85339db1a71

最佳答案

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

但是,您当然可以备份整个 /var/lib/docker .这不适用于 CircleCI 的远程 docker 引擎,因为您没有 sudo 访问权限,但适用于您所做的 GitHub Actions。

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

关于docker - 如何重用 `RUN --mount=type=cache` docker build 中的缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60448114/

相关文章:

git - 如何在 docker 中使用挂载的 ssh 来执行 Dockerfile 中的后续命令

azure - Azure 和网络中的 Windows 容器

docker - 二进制文件是用 'CGO_ENABLED=0' 编译的,go-sqlite3 需要 cgo 才能工作。这是一个 stub

docker - Kubernetes/Docker - 用于 Web 服务的 SSL 证书

python - 我有多个 flask 微服务彼此通信,如何配置docker?

Dockerfile, 如何安装 snap, snapd : unrecognized service

node.js - 当前端和后端在虚拟 docker 网络中时,如何使用 axios 寻址后端主机

node.js - Docker 化 Node.js 应用程序时的 EADDRNOTAVAIL

docker - 正常构建时如何忽略docker buildkit标志

docker - 如何使用 docker-compose 启用 BuildKit?