使用 kaniko 构建多阶段图像时出现缓存问题
Cache issue when building a multi-stage image with kaniko
我已经使用 kaniko(版本 v1.6.0-debug
)在 kubernetes 中构建容器镜像,但是当启用缓存时我遇到了以下问题(/kaniko/executor --cache --cache-repo $CI_REGISTRY_IMAGE/cache
)。
这是一个解释问题的简化 Dockerfile(真正的 Dockerfile 有 PHP package.json
和 package.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 注册表中),kaniko 看不到任何修改并使用
的缓存层
COPY --from=builder /root/testfile testfile
结果是最终 docker 图像提供文件的旧(缓存)版本 testfile
而不是最后一个。
知道如何解决 solve/mitigate 这个问题吗?当然,如果我从 docker 存储库中删除缓存层,图像会正确构建,但禁用缓存对我来说不是一个选项,因为构建速度太慢。
升级到 Kaniko 1.7.0 可能会解决您的问题:https://github.com/GoogleContainerTools/kaniko/pull/1735
我已经使用 kaniko(版本 v1.6.0-debug
)在 kubernetes 中构建容器镜像,但是当启用缓存时我遇到了以下问题(/kaniko/executor --cache --cache-repo $CI_REGISTRY_IMAGE/cache
)。
这是一个解释问题的简化 Dockerfile(真正的 Dockerfile 有 PHP package.json
和 package.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 注册表中),kaniko 看不到任何修改并使用
COPY --from=builder /root/testfile testfile
结果是最终 docker 图像提供文件的旧(缓存)版本 testfile
而不是最后一个。
知道如何解决 solve/mitigate 这个问题吗?当然,如果我从 docker 存储库中删除缓存层,图像会正确构建,但禁用缓存对我来说不是一个选项,因为构建速度太慢。
升级到 Kaniko 1.7.0 可能会解决您的问题:https://github.com/GoogleContainerTools/kaniko/pull/1735