trivy可直接扫描docker镜像而无需启动容器或本地docker daemon,支持远程registry、本地tar包、运行中容器文件系统等多种源,自动识别os包与应用依赖中的cve漏洞,并聚焦critical/high级别生成结构化报表。

直接用 Trivy 扫描 Docker 镜像,不需要启动容器或依赖本地 Docker daemon,它能解析镜像层(包括远程 registry、本地 tar 包、运行中容器的文件系统),自动识别操作系统包和应用依赖中的 CVE 漏洞,并聚焦高危问题生成结构化报表。
安装并初始化 Trivy
Trivy 是单二进制工具,推荐用官方脚本一键安装:
- 执行:curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin
- 验证:trivy --version
- 首次运行会自动下载漏洞数据库(约 200MB),后续扫描复用本地缓存;如需手动更新:trivy image --download-db-only
精准扫描高危 CVE 并导出多格式报表
默认扫描会列出所有级别漏洞,但生产环境通常只关注可被远程利用、无需用户交互的高风险项。关键操作如下:
- 只报告 CRITICAL 和 HIGH 级别:trivy image --severity CRITICAL,HIGH nginx:alpine
- 生成可读性高的表格报告:trivy image --format table --no-progress --severity CRITICAL,HIGH nginx:alpine > report.txt
- 导出标准 SARIF 格式(兼容 GitHub、VS Code、CI 工具):trivy image --format template --template "@contrib/sarif.tpl" --output report.sarif --severity CRITICAL,HIGH nginx:alpine
- 输出 JSON 便于程序解析:trivy image --format json --output report.json --severity CRITICAL,HIGH nginx:alpine
适配不同镜像来源的扫描方式
Trivy 支持多种输入源,无需提前 docker pull:
- 远程公开镜像(如 Docker Hub):trivy image python:3.11-slim
- 私有仓库镜像(如 Harbor):trivy image myharbor.example.com/project/app:v2.1(前提是已执行 docker login,Trivy 会复用 ~/.docker/config.json 凭据)
- 本地已导出的 tar 包(适合离线 CI 环境):trivy image --input app.tar(注意:必须显式加 --input 参数)
- 正在运行的容器文件系统:trivy fs /var/lib/docker/overlay2/xxx/diff(路径可通过 docker inspect 获取)
构建自动化报表任务
把扫描动作固化为定时任务,每天生成带时间戳的独立报告:
- 写脚本 /opt/scripts/scan-critical.sh,内容示例:
#!/bin/bash
REPORT_DIR="/var/log/trivy-critical"
mkdir -p "$REPORT_DIR"
DATE=$(date +%Y%m%d-%H%M%S)
trivy image \
--format table \
--severity CRITICAL,HIGH \
--no-progress \
--output "$REPORT_DIR/nginx-$DATE.txt" \
nginx:alpine
trivy image \
--format json \
--severity CRITICAL,HIGH \
--output "$REPORT_DIR/nginx-$DATE.json" \
nginx:alpine
- 添加到 cron(每日凌晨 3 点执行):0 3 * * * /bin/bash /opt/scripts/scan-critical.sh
- 配合日志轮转或简单清理旧报告,避免磁盘占满











