直接看构建日志即可判断缓存是否命中:Using cache表示命中,Running in或新哈希值出现表明未命中,--progress=plain可查看详细缓存键,结合上下文哈希、.dockerignore配置及基础镜像digest比对,能精准定位缓存断裂原因。
直接看构建日志就能判断缓存是否命中,不需要额外工具。Docker 默认输出里藏着关键线索,重点抓几个词、几处变化,就能快速定位哪一层断了、为什么断。
Docker 构建时每层都会打印状态,这些提示就是缓存的“晴雨表”:
RUN npm install 开始下载):说明这层没命中,正在重新跑---> Using cache,下一次却变成 ---> abc123def(新哈希):这就是缓存断裂点,从这层开始全重来加 --progress=plain 参数运行构建,日志会详细列出每一层的缓存键构成:
FROM 镜像 digest 不同了--no-cache=false 显式启用缓存,避免因配置问题误判为全局禁用即使没写 COPY,Docker 也会为整个构建目录算哈希。只要上下文里多了个临时文件,所有依赖上下文的层都可能失效:
tar -cf - . | sha256sum 对比两次构建前的上下文哈希,不一样就说明上下文本身在变.dockerignore 是否漏掉了 node_modules、.git/index、npm-debug.log、.DS_Store 这类高频变动项find . -type f -newermt "1 hour ago" | head -20 快速找出刚被修改的干扰文件FROM 行看着没动,但远程镜像可能已更新。常见表现是第一层就重建:
docker pull ubuntu:22.04,再构建,看是否还重建;如果不重建了,说明原缓存基于旧 digestdocker inspect $(docker images ubuntu:22.04 -q) --format='{{.RepoDigests}}'
FROM ubuntu:22.04 改成 FROM ubuntu@sha256:abc...,彻底锁定基础层不复杂但容易忽略