症状
每次构建都耗时相同,因为缓存从未被复用,输出显示步骤重新执行而非命中缓存。这是层顺序问题:频繁变动的文件在昂贵的依赖安装之前被复制,于是每次源码改动都使安装层及其后所有层失效。构建参数与变化的标签也可能意外破坏缓存。
诊断
用 –progress=plain 查看哪一步未命中缓存;调整为先复制清单再安装;检查两次构建间变化的文件。
docker build --progress=plain . 2>&1 | grep -i "CACHED\|CACHE"
根因
某个频繁变化的层排在昂贵层之前,其输入的任何改动都会使缓存的依赖安装失效并强制完整重建。
修复
按从最少变到最多变的顺序排列层;先复制依赖清单并安装,再复制源码;用 .dockerignore 把易变文件挡在早期层之外;保持构建参数稳定。
验证
修改一个源文件后重新构建,确认依赖层报告 CACHED 而非重跑。微小改动下缓存复用即证明顺序正确。
常见陷阱
为省事用 COPY . . 放在最前会让任何文件改动都重建全部层;应拆分复制步骤。