要让 docker 镜像仓库在扫描发现高危漏洞时自动拦截推送,核心是启用「准入阻断」机制——不是等镜像入库后再告警,而是把扫描结果作为推送成功的前置条件。这需要仓库本身支持策略式扫描(如 harbor),或配合 docker scout + ci/cd 门禁实现。

要让 Docker 镜像仓库在扫描发现高危漏洞时自动拦截推送,核心是启用「准入阻断」机制——不是等镜像入库后再告警,而是把扫描结果作为推送成功的前置条件。这需要仓库本身支持策略式扫描(如 Harbor),或配合 Docker Scout + CI/CD 门禁实现。下面分场景说明关键配置点。
Harbor 项目级自动拦截配置
Harbor 是目前最成熟支持「推送即扫描+阻断」的开源方案,拦截逻辑发生在 registry 层,无需修改 CI 流程:
- 修改 harbor.yml 中的
trivy区块:确保skip_update: false(首次部署必须开启)、severity: HIGH(设为 HIGH 或 CRITICAL)、timeout: 5(避免大镜像卡住队列) - 进入目标项目 →「配置」→「漏洞扫描」:勾选「自动扫描镜像」,触发方式选「推送时」;再开启「严重漏洞自动阻止部署」
- 注意:该策略仅对当前项目生效,每个需保护的项目都得单独配置
- 验证时推送一个含已知 CRITICAL 漏洞的镜像(如
alpine:3.14),若配置正确,docker push会直接返回unauthorized: unauthorized to access repository
Docker Scout + CI 流水线拦截
如果你用的是 Docker Hub 或私有 registry(如原生 Registry、ECR、ACR)且不支持内置阻断,就得把扫描和拦截逻辑前移到 CI 中:
- 在构建完成、推送前执行:
docker scout cves your-image:tag --only-severity critical,high --exit-code -
--exit-code参数会让命令在发现指定级别漏洞时返回非零退出码,CI 工具(如 GitHub Actions、GitLab CI)可据此中止流程 - 搭配
--org和--project可绑定团队策略,避免本地误判;建议同时加--ignore-cves CVE-XXXX-XXXX过滤已确认无风险的误报 - 注意:该方式依赖 CI 环境能访问公网(Docker Scout 需联网调用数据库),内网环境需部署离线版或改用 Trivy CLI 替代
基础镜像与签名双重校验
单靠扫描还不够,要防止绕过扫描的镜像直接入库:
- 在 Harbor 中启用「镜像签名验证」,只允许 cosign 签名过的镜像被推送
- 建立基础镜像白名单(如只允许
registry.example.com/base/alpine:3.20),禁止使用latest或未审计的第三方镜像 - 配合 OPA/Gatekeeper,在 Kubernetes 部署阶段做二次校验:即使镜像进了仓库,拉取时仍检查其扫描报告是否达标
真正起作用的不是“有没有扫描”,而是“扫描结果能不能卡住交付”。只要把 severity 设严、阻断开关打开、策略绑定到具体项目,就能在 Log4j2 类漏洞出现当天就把它挡在镜像仓库门外。











