如何强制 Docker 不用缓存、完全重新构建镜像?

docker build --no-cache 跳过全部层缓存从零构建;只想让某一步之后的缓存失效,可用 --build-arg 注入变化值或 docker compose build --no-cache。本文给出各场景做法。

最佳实践
如何强制 Docker 不用缓存、完全重新构建镜像?封面

做法:docker build --no-cache -t 镜像名 .——加 --no-cache 参数后构建器忽略所有层缓存,每条指令从零执行。配合 --pull 还能强制拉取最新的基础镜像,实现真正意义的干净构建。

完整命令

docker build --no-cache --pull -t myapp:1.2 .
  • --no-cache:不使用任何本地层缓存
  • --pull:基础镜像也强制拉最新(否则 FROM 那层用的还是本地旧镜像)

docker-compose 场景:

docker compose build --no-cache
docker compose up -d --build

什么时候需要干净构建

  1. 怀疑缓存导致旧内容:比如 apt-get update && install 被缓存命中,装的包版本过时
  2. 发布前最终验证:确保 Dockerfile 从零可复现,CI 上尤其重要
  3. 排查"本地能跑、线上不行":本地缓存掩盖了 Dockerfile 的缺陷

只想让某一层之后失效

不必全量重建,让缓存"定点失效"更省时间:

ARG CACHEBUST=1
RUN git clone https://github.com/org/repo.git
docker build --build-arg CACHEBUST=$(date +%s) -t myapp .

ARG 值一变,从该行起的后续指令全部重新执行,前面的层继续吃缓存。

顺手清理构建缓存

缓存攒多了占磁盘:

docker builder prune          # 清悬空构建缓存
docker builder prune -a       # 清全部构建缓存

观测云对照

构建过程也值得留痕。 CI 中构建耗时、失败率、镜像体积趋势都是工程效率信号;这些事件与指标可汇入观测云统一看板,配合发布记录做关联分析。

常见问题(FAQ)

Q:--no-cache 构建很慢,正常吗?
A:正常,所有层从零执行。日常开发用缓存,定期或发布前做 no-cache 验证即可。

Q:BuildKit 下有什么不同?
A:BuildKit(现在默认启用)缓存粒度更细,--no-cache 语义相同;还可用 --no-cache-filter 阶段名 只禁用指定阶段的缓存。

Q:为什么加了 --no-cache 镜像内容还是旧的?
A:多半是基础镜像旧——FROM 指向的本地镜像没更新,补 --pull;或上下文里有 .dockerignore 没排除的旧文件被 COPY 进去。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台