knqyf263/trivyTrivy("tri"发音如"trigger","vy"发音如"envy")是一款简单且全面的容器漏洞扫描工具。它能够检测操作系统包(如Alpine、Red Hat Universal Base Image、RHEL、CentOS、Debian、Ubuntu等)和应用依赖(如Bundler、Composer、Pipenv、Poetry、npm、yarn、Cargo等)的漏洞。Trivy易于使用,仅需安装二进制文件即可开始扫描,扫描时只需指定容器镜像名称。
Trivy特别适合在持续集成(CI)流程中使用,可在推送容器镜像至仓库前轻松扫描本地镜像,帮助开发和运维团队在早期发现并修复漏洞。
/etc/yum.repos.d/trivy.repo:
ini[trivy] name=Trivy repository baseurl=[***] gpgcheck=0 enabled=1
或直接安装RPM包:bashsudo yum -y update sudo yum -y install trivy
bashrpm -ivh [***]
[CODE_NAME]为系统代号(可通过lsb_release -c获取,如wheezy、jessie、stretch、buster、trusty、xenial、bionic):
或直接安装DEB包:bashsudo apt-get install apt-transport-https gnupg wget -qO - [***] | sudo apt-key add - echo "deb [***] [CODE_NAME] main" | sudo tee -a /etc/apt/sources.list.d/trivy.list sudo apt-get update sudo apt-get install trivy
bashsudo apt-get install rpm wget [***] sudo dpkg -i trivy_0.0.15_Linux-64bit.deb
通过AUR安装:
bashpikaur -Sy trivy-bin # 或 yay -Sy trivy-bin
bashbrew install knqyf263/trivy/trivy
从GitHub Releases下载对应操作系统/架构的归档文件,解压后将二进制文件放入$PATH目录(如Unix系统的/usr/local/bin),并确保具有执行权限。
扫描RHEL/CentOS镜像需安装
rpm命令。
bashmkdir -p $GOPATH/src/github.com/knqyf263 cd $GOPATH/src/github.com/knqyf263 git clone [***] cd trivy/cmd/trivy/ export GO111MODULE=on go install
指定镜像名称即可扫描:
bashtrivy python:3.4-alpine
bashdocker run --rm -v [本地缓存目录]:/root/.cache/ knqyf263/trivy [镜像名称]
macOS示例:
bashdocker run --rm -v $HOME/Library/Caches:/root/.cache/ knqyf263/trivy python:3.4-alpine
需挂载Docker socket:
bashdocker run --rm -v /var/run/docker.sock:/var/run/docker.sock \ -v $HOME/Library/Caches:/root/.cache/ knqyf263/trivy python:3.4-alpine
若运行出错,请拉取最新版本镜像:
docker pull knqyf263/trivy
| 参数 | 说明 | 示例 |
|---|---|---|
--severity | 按严重级别过滤漏洞(逗号分隔,可选:UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL) | --severity HIGH,CRITICAL |
--format | 输出格式(table/json) | --format json |
--output | 输出结果至文件 | --output result.json |
--exit-code | 发现漏洞时的退出码(默认0) | --exit-code 1 |
--no-update | 跳过漏洞数据库更新 | --no-update |
--ignore-unfixed | 忽略未修复的漏洞 | --ignore-unfixed |
--vuln-type | 按漏洞类型过滤(os/app) | --vuln-type app |
--ignore-policy | 指定忽略漏洞的策略文件 | --ignore-policy .trivyignore |
--clear-cache | 清除镜像缓存 | --clear-cache |
--reset | 重置所有缓存和数据库 | --reset |
bashtrivy knqyf263/test-image:1.2.3
bashtrivy image --input path/to/image.tar
bashtrivy --format json --output result.json python:3.4-alpine
仅显示HIGH和CRITICAL级别漏洞:
bashtrivy --severity HIGH,CRITICAL python:3.4-alpine
仅扫描应用依赖漏洞:
bashtrivy --vuln-type app python:3.4-alpine
bashtrivy --no-update python:3.4-alpine
bashtrivy --ignore-unfixed python:3.4-alpine
发现CRITICAL漏洞时退出码设为2:
bashtrivy --exit-code 2 --severity CRITICAL python:3.4-alpine
创建.trivyignore文件:
# 忽略CVE-2019-1543 CVE-2019-1543 # 忽略rails-html-sanitizer的所有漏洞 rails-html-sanitizer
执行扫描:
bashtrivy --ignore-policy .trivyignore python:3.4-alpine
bashtrivy --clear-cache
bashtrivy --reset
在.travis.yml中添加:
yamllanguage: bash services: - docker before_script: - docker pull python:3.4-alpine - curl -sfL [***] | sh -s -- -b /usr/local/bin script: - trivy --exit-code 1 --severity HIGH,CRITICAL python:3.4-alpine
在.circleci/config.yml中添加:
yamlversion: 2.1 jobs: scan: docker: - image: circleci/golang:1.14 steps: - checkout - run: name: Install Trivy command: | curl -sfL [***] | sh -s -- -b /usr/local/bin - run: name: Scan image command: trivy --exit-code 1 --severity HIGH,CRITICAL python:3.4-alpine workflows: scan_workflow: jobs: - scan
如需扫描私有仓库镜像,需先登录仓库:
bash# Docker CLI登录 docker login private.registry.com # 或设置环境变量 export TRIVY_USERNAME=username export TRIVY_PASSWORD=password trivy private.registry.com/image:tag
Trivy通过解析操作系统的包管理数据库(如Alpine的apk、Debian的dpkg、RHEL的rpm)检测已安装包的漏洞,并与官方CVE数据库比对。
Trivy扫描应用依赖文件(如Gemfile.lock、package-lock.json、Cargo.lock、composer.lock等),提取依赖版本信息,与对应语言的安全数据库(如RubySec、npm audit、RustSec等)比对,发现应用层漏洞。
/usr/local/bin或/opt/homebrew/bin)在$PATH中。Q:扫描速度慢?
A:首次扫描需下载漏洞数据库,后续扫描会使用缓存;可添加--no-update跳过数据库更新(适用于频繁扫描场景)。
Q:如何更新Trivy?
A:根据安装方式选择:RPM/DEB使用包管理器更新,Homebrew执行brew upgrade trivy,二进制包需手动下载新版本。
Q:支持Windows系统吗?
A:支持,可从GitHub Releases下载Windows二进制包。
Trivy相比其他扫描工具(如Clair、Anchore Engine等)具有以下优势:
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像服务
在 Docker Desktop 配置镜像
Docker Compose 项目配置
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
MacOS OrbStack 容器配置
在宝塔面板一键配置镜像
Synology 群晖 NAS 配置
飞牛 fnOS 系统配置镜像
极空间 NAS 系统配置服务
爱快 iKuai 路由系统配置
绿联 NAS 系统配置镜像
QNAP 威联通 NAS 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
免费版仅支持 Docker Hub 访问,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等;免费版仅支持 docker.io。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
来自真实用户的反馈,见证轩辕镜像的优质服务