caching - 使用 kaniko 构建多阶段图像时出现缓存问题

标签 caching docker-multi-stage-build kaniko

我已经使用 kaniko(版本 v1.6.0-debug)在 kubernetes 中构建容器镜像,但是当启用缓存(/kaniko/执行器 --cache --cache-repo $CI_REGISTRY_IMAGE/cache).

这是一个解释问题的简化 Dockerfile(真正的 Dockerfile 有一个 PHP package.jsonpackage.lock 文件,其中添加了新的需求)。

FROM busybox:1.33.1 AS builder
WORKDIR /root
COPY testfile testfile

FROM busybox:1.33.1 AS release
WORKDIR /root
COPY --from=builder /root/testfile testfile
RUN cat /root/testfile

如果 testfile 被修改,并且之前构建了 docker 镜像(因此它的所有层都缓存在 docker registry 中),kaniko 看不到任何修改并将缓存层用于

COPY --from=builder /root/testfile testfile

结果是最终的 docker 镜像提供了文件 testfile 的旧(缓存)版本,而不是最后一个。

知道如何解决/缓解这个问题吗?当然,如果我从我们的 docker 存储库中删除缓存层,图像会正确构建,但禁用缓存对我来说不是一个选项,因为构建速度太慢。

最佳答案

升级到 Kaniko 1.7.0 可能会解决您的问题:https://github.com/GoogleContainerTools/kaniko/pull/1735

关于caching - 使用 kaniko 构建多阶段图像时出现缓存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68955031/

相关文章:

ios - 核心数据过多 VM : SQLite page cache

docker - 在Dockerfile中清空多阶段构建

docker - 如何在单独的 GitLab CI 阶段执行 kaniko Docker 构建和推送?

docker - gitlab kaniko - 没有找到匹配的凭据,依靠匿名

docker - openshift 集群中 Kaniko 作业的权限被拒绝

ruby-on-rails - 使用:counter_cache and :touch in the same association

c# - 如何强制浏览器使用版本控制重新加载缓存的静态文件?

docker - 在多阶段 Docker 构建中保留 ENV 变量

docker - 使用多阶段 docker 文件输出多个图像

.net - 在 C# 服务中设置 ASP.Net 缓存 PrivateBytesLimit