--no-cache 是什么
docker build --no-cache 跳过所有层缓存,逐条指令重新执行;与 --pull 组合时可同时刷新基础镜像。它主要用于排除缓存带来的干扰,日常构建不必每次都加,代价是明显增加的构建时间。
基本信息
| 用途 | 禁用层缓存,全量重建 |
|---|---|
| 语法 | docker build --no-cache --pull -t 名称 . |
| 与 --pull 的差别 | --no-cache 不管基础镜像是否更新,只有 --pull 才会拉新版本 |
| buildx 对应 | docker buildx build --no-cache 同样有效 |
| 主要代价 | 构建耗时明显增加 |
典型使用场景
- 排查本地能构建、线上构建失败:排除缓存造成的差异
- 依赖源不稳定留下半成品缓存时,重建一次恢复干净状态
- 基础镜像更新后确认安全补丁是否真的生效(需配合 --pull)
- 在 CI 里安排定时的无缓存构建,验证从零构建始终可通过
- 发布前的最终验证构建,确认产物可复现
- 排查镜像层里疑似残留旧文件的疑难问题
示例
示例
docker build --no-cache --pull -t app/web:1.0 . # 全量重建并刷新基础镜像
docker build --no-cache -t app/web:dev . # 只禁用层缓存
docker buildx build --no-cache --pull --load -t app/web:1.0 .
docker images | grep app/web # 确认产物已生成三个构建开关的区别
| 参数 | 作用 | 常见误区 |
|---|---|---|
| --no-cache | 所有指令重新执行 | 以为它同时会更新基础镜像 |
| --pull | 拉取基础镜像的新版本 | 单独使用不会重建中间层 |
| 两者叠加 | 最彻底的重建 | 耗时最长,适合发布前或定期验证 |
| --target | 只构建到指定阶段 | 常与无缓存组合用于调试构建阶段 |
全量重建的耗时与依赖安装规模直接相关,开发阶段频繁使用会明显拖慢节奏,按需使用即可。
缓存造成的典型现象是“明明改了文件,构建结果却没变”,先用 --no-cache 验证一次,再回头检查 .dockerignore 与构建上下文。
在 CI 里做定时无缓存构建能提前暴露依赖源失效、包被下架这类问题,避免发布当天才发现构建不可用。