--no-cache强制全量重建,绕过层哈希比对,从FROM逐层执行;需正确放置参数位置,配合--pull更新基础镜像,适用于CI/CD、调试及防缓存污染场景。
直接加 --no-cache 就能跳过所有已有缓存层,从第一行 from 开始逐层重新执行构建指令。
为什么 --no-cache 能强制全量重建
Docker 默认按层计算哈希(SHA-256),只要某层输入未变(指令+上下文内容一致),就复用本地缓存镜像层。而 --no-cache 会绕过整个哈希比对逻辑,让守护进程忽略所有中间镜像,相当于“假装没建过”,每条 RUN、COPY、ADD 都真实运行一遍。
实际使用时要注意什么
- 命令必须写在
docker build后,不能只写docker --no-cache build(位置错会报错) - 如果用
docker-compose build,对应参数是--no-cache,不是--build --no-cache—— 后者中--build是冗余的 - 构建上下文仍会完整上传,
.dockerignore继续生效,它不影响缓存策略,但影响传给守护进程的文件集合 - 基础镜像(如
ubuntu:22.04)即使远程已更新,--no-cache本身不会自动拉取新版;需额外加--pull才强制更新基础层
什么时候该用 --no-cache
- CI/CD 流水线中要求“可重现且纯净”的生产构建
- 怀疑缓存污染(比如上一次构建失败导致某层状态异常)
- 刚更新了基础镜像或全局依赖源(如换了 pip 源、升级了 node 版本),且不想手动删旧镜像
- 调试 Dockerfile 时想确认某条指令是否真被跳过,而非误命中缓存
替代方案:比 --no-cache 更精准的控制
全禁缓存虽彻底,但代价是慢。更推荐的组合方式:
-
docker build --cache-from=registry/app:latest --pull -t app:new .:用远端最新镜像做缓存源,兼顾速度与新鲜度 - 配合
.dockerignore过滤日志、临时文件、IDE 配置等易变内容,减少 COPY 层意外失效 - 把易变操作(如安装依赖)和稳定操作(如复制源码)拆开,利用分层缓存特性,只重跑必要部分


















