Trivy是Docker镜像构建阶段集成静态扫描的首选工具,支持构建后立即扫描本地镜像、按严重等级中断流程(如--exit-code 1 --severity CRITICAL)、输出JSON报告,并可与Docker Scout、GitHub Actions等深度集成实现安全左移。

在 Docker 镜像构建阶段集成静态扫描,核心是把安全检查“左移”到构建环节,而不是等镜像推到仓库才查。关键不在于写多复杂的脚本,而是在构建流水线中自然嵌入扫描动作,并让结果能真正影响构建成败。
构建时直接调用 Trivy 扫描本地镜像
Trivy 是最轻量、适配 CI 最好的选择。它支持构建后立即扫描,无需推送,且能识别 OS 包和语言依赖(如 pip、npm):
- 构建完立刻扫描:
docker build -t myapp:dev . && trivy image --severity HIGH,CRITICAL myapp:dev - 发现高危漏洞就中断流程:
trivy image --severity CRITICAL --exit-code 1 myapp:dev,返回非 0 码可被 CI 工具识别为失败 - 配合
--format json --output report.json输出结构化报告,方便后续解析或存档
用 Docker Scout 实现构建即检(推荐用于团队统一策略)
Docker Scout 是官方方案,适合希望策略集中管控的团队。它不依赖本地安装复杂工具,只要镜像打标签并推送,就能自动触发扫描:
- 确保 Docker Desktop ≥ v4.27 或 CLI 支持 Scout 插件,登录 Docker Hub 并在组织设置中开启 Scout
- 构建 + 推送即触发:
docker build -t yourname/myapp:latest . && docker push yourname/myapp:latest - 推送后 1–2 分钟内,Docker Hub 页面就会显示 CVE 数量、受影响组件及修复建议,比如提示 “ubuntu:20.04 含 5 个 Critical 漏洞,建议换用 distroless”
在 GitHub Actions 或 GitLab CI 中固化扫描步骤
手动执行容易遗漏,必须自动化。以 GitHub Actions 为例,一个最小可行工作流是:
- 使用
docker/login-action登录 Docker Hub - 用
docker/build-push-action构建并打标签 - 紧接着运行
docker/scout-action@v1,配置fail-on-critical: true,一旦发现 Critical 漏洞,整个 job 直接失败 - 扫描结果可作为 artifact 保存,也可通过
github-alerts格式输出,直接在 PR 中标记问题
不只是扫 CVE,还要查 Dockerfile 本身是否合规
很多风险来自构建方式,而非软件包。可在构建前后加一层配置审计:
- 用 Dockle 扫描镜像是否遵循 CIS 最佳实践:
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aquasec/dockle myapp:dev,检查是否用了USER、是否禁用privileged、是否挂载了/etc等 - 在
docker build命令中加入--no-cache和--progress=plain,避免缓存掩盖基础镜像更新问题 - 在 Dockerfile 开头显式声明基础镜像版本(如
FROM python:3.11-slim@sha256:abc...),防止隐式拉取陈旧层


















