Docker --cache-from对新拉取镜像缓存失效的相关问题咨询
Docker --cache-from 相关问题解答
认知正误判断
你的原有认知没有错误,--cache-from确实支持复用已拉取镜像的缓存层,操作未生效是缺少了必要的前置配置。
未生效的核心原因
- Docker默认构建生成的镜像未内嵌缓存匹配所需的元数据,推送后再拉取的镜像无法被缓存机制识别
- 未开启BuildKit构建后端时,
--cache-from对外部镜像的适配能力存在缺陷
正确使用方式
基础用法(内嵌缓存元数据)
构建时添加BuildKit参数和内嵌缓存参数即可,完整流程如下:
# 首次构建:开启BuildKit + 内嵌缓存元数据 DOCKER_BUILDKIT=1 docker build --target base --build-arg BUILDKIT_INLINE_CACHE=1 -t image:base . docker push image:base # 清理本地缓存 docker image rm image:base docker builder prune -f # 重新构建时拉取镜像后直接使用--cache-from docker pull image:base DOCKER_BUILDKIT=1 docker build --target base --cache-from image:base -t image:base .
进阶用法(独立缓存存储)
针对复杂多阶段构建场景,可以使用Buildx的独立缓存功能,无需把缓存元数据内嵌到业务镜像中,也无需提前拉取完整业务镜像:
# 首次构建:将缓存单独推送到仓库的专属缓存标签 docker buildx build --target base --cache-to type=registry,ref=image:build-cache,mode=max -t image:base . --push # 后续构建直接拉取远程缓存使用 docker buildx build --target base --cache-from type=registry,ref=image:build-cache -t image:base .
常见现象说明
本地未清理缓存时,Docker默认优先匹配本地已有的缓存层,优先级高于--cache-from指定的外部镜像,因此加不加参数效果一致。
内容的提问来源于stack exchange,提问作者Morgan Soren
相关产品推荐
相关产品推荐

