--pull 是什么
默认情况下,只要本地已经有同名基础镜像,构建就直接用它,不会去仓库确认上游是否更新过。加上 --pull 后,构建前会先向仓库查询基础镜像的当前内容,有更新就拉下来再构建。这个参数解决的是「标签没变、内容变了」的情况:上游用同一个标签发布了新版底座,你不加 --pull 就永远拿到本地那份旧内容。
基本信息
| 语法 | docker build --pull -t 名称 构建上下文 |
|---|---|
| buildx 写法 | docker buildx build --pull -t 名称 . |
| 默认行为 | 本地已有基础镜像即复用,不检查远端 |
| 适用场景 | 安全例行更新、怀疑底座过旧、CI 定期重建 |
| 副作用 | 构建结果可能与上次不同,需要完整回归 |
| 配套手段 | 镜像扫描与基础镜像版本巡检 |
典型使用场景
- 每周例行重建:把上游底座的安全补丁带进业务镜像
- 排查只在别人环境复现的问题时,确认双方底座是否一致
- 需要最新底座特性(新版语言运行时、新发行版)时
- CI 中作为固定步骤,避免长期复用构建机上的陈旧缓存镜像
- 安全事件后紧急刷新底座,快速获得上游修复
使用与验证
使用与验证
# 构建前刷新基础镜像;配合 --no-cache 可排除缓存层干扰
docker build --pull -t app/web:1.0 .
# buildx 同样支持;多平台构建时每个平台的基础镜像都会重新确认
docker buildx build --pull --platform linux/amd64 --load -t app/web:1.0 .
# 核对本地底座的时间与摘要,判断是否已刷新
docker image inspect node:20-alpine --format '{{.Created}} {{index .RepoDigests 0}}'
# 清理未被使用的旧底座镜像,避免磁盘持续增长
docker image prune -f参数组合怎么读
| 组合 | 作用 | 何时使用 |
|---|---|---|
| --pull | 刷新基础镜像 | 例行更新与安全跟进 |
| --no-cache | 忽略构建缓存 | 怀疑缓存层陈旧或结果异常 |
| 二者同用 | 底座与各层全部重算 | 紧急刷新与最终发布验收 |
| 都不加 | 可能完全复用本地内容 | 快速迭代开发阶段 |
| --pull --platform | 按平台刷新底座 | 多架构发布 |
--pull 刷新的是基础镜像,不会刷新构建上下文里 COPY 进来的本地文件,也不会自动更新应用依赖;依赖升级要另走包管理器与锁文件流程。
固定到摘要的 Dockerfile 不受 --pull 影响:摘要指向确定内容,上游新补丁不会改变它,需要显式改摘要才能升级。