首页/安全/漏洞与攻击面速查/容器镜像重建代替就地打补丁
补丁与修复管理45 条

容器镜像重建代替就地打补丁

容器内不推荐就地更新包:标准做法是更新基础镜像 → 重建应用镜像 → 扫描 → 滚动发布;镜像标签与 digest 固定,保证每次部署产物可追溯。

漏洞与攻击面速查安全更新于 2026-10-13

容器镜像重建是什么

容器内不推荐就地更新软件包:标准做法是更新基础镜像 → 重建应用镜像 → 扫描 → 滚动发布。这条路径保证了构建产物不可变、可追溯、可回滚。部署时用镜像摘要(digest)固定引用,避免标签漂移导致不同节点拉到不同内容。就地进容器打补丁会破坏不可变性,重建与回滚都无从谈起。

基本信息

基本原则构建产物不可变:修复等于出一个新镜像
引用方式部署使用 digest 固定,避免 tag 漂移
清理策略保留回滚所需的最近若干标签,其余按策略回收
验证环节重建后扫描,再滚动发布并观察

重建流程

重建流程
docker pull base-image:tag            # 获取含修复的新基础镜像
docker build --no-cache -t app:2026-10-12 .   # 重新构建(必要时禁用缓存)
trivy image --severity HIGH,CRITICAL app:2026-10-12   # 重建后扫描
docker push registry.example.com/app:2026-10-12       # 推送并滚动更新
# 保留旧标签与 digest 用于回滚,按批次观察后再全量

典型使用场景

  • 基础镜像发布安全修复后重建业务镜像
  • 语言运行时或依赖升级:修改 Dockerfile 后重建
  • 批量资产治理:对同一基础镜像构建的全部业务镜像统一重建
  • 回滚准备:发布前确认旧镜像仍可用并被保留
  • 合规要求:证明镜像内容与扫描结果、构建记录可追溯

常见问题与处置

问题后果处置
用 latest 标签不同节点内容不一致改用固定标签 + digest
就地进容器改包不可变性被破坏改为重建新镜像
构建缓存未失效基础镜像更新未生效拉取基础镜像或禁用缓存
旧标签被清理无法回滚保留回滚所需标签
『进容器手动 yum update』会破坏不可变性:容器重启后改动丢失,重建与回滚都无从谈起,问题还会在下次发布时重现。
重建后要重新扫描:新基础镜像可能引入其他问题,同时应确认扫描对象与将要部署的镜像 digest 完全一致。

易错点

  • 部署用 latest 标签:基础镜像更新后,不同节点拉到了不同内容
  • 进容器就地更新软件包,重建与回滚都无从谈起,重启即失效
  • 构建缓存导致基础镜像更新未生效,扫描的与实际运行的不是同一份
  • 旧标签被清理,回滚时找不到可用镜像
  • 只在构建时扫描,不保留扫描结果与构建记录的关联,审计时无法追溯

数据来源与参考

  • Docker 文档(镜像构建与标签建议)
  • Trivy 官方文档(镜像扫描)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌