本项目旨在解决大规模使用https://github.com/aquasecurity/trivy时遇到的一个问题。在需要使用trivy扫描数百甚至数千个容器镜像的环境中,下载漏洞数据库时可能会触发GitHub的限制。
本项目的灵感来源于https://hub.docker.com/r/arminc/clair-db%E5%AE%B9%E5%99%A8%E9%95%9C%E5%83%8F%E4%BB%A5%E5%8F%8Ahttps://github.com/arminc/clair-local-scan%E9%A1%B9%E7%9B%AE%EF%BC%8C%E5%90%8E%E8%80%85%E5%8A%A0%E5%BF%AB%E4%BA%86https://github.com/quay/clair%E6%BC%8F%E6%B4%9E%E6%89%AB%E6%8F%8F%E7%9A%84%E9%80%9F%E5%BA%A6%E3%80%82
我们每天都会构建并发布一个新的容器镜像,遵循https://github.com/aquasecurity/trivy/blob/main/docs/docs/advanced/air-gap.md%E3%80%82%E8%AF%A5%E6%B5%81%E7%A8%8B%E8%AE%BE%E8%AE%A1%E7%94%A8%E4%BA%8E%E9%9A%94%E7%A6%BB%E7%8E%AF%E5%A2%83%EF%BC%88air-gapped environment),但同样适用于在CI系统(如drone、gitlab、github-actions、circle-ci或travis)上运行。
我们每天发布两种不同的标签:
latest:每天都会被覆盖。如果选择此标签,请确保在运行扫描前拉取(pull)镜像。YYYY-MM-DD:每天仅发布一个。我们建议使用此标签。发布时间为UTC时间01:00。# 运行前请务必拉取镜像
$ docker pull quay.io/sighup/trivy-offline
$ docker run --rm quay.io/sighup/trivy-offline [YOUR_IMAGE_NAME]
# 或
$ docker run --rm quay.io/sighup/trivy-offline:$(date +%Y-%m-%d) [YOUR_IMAGE_NAME]
如果需要扫描主机上的镜像,需挂载docker.sock。
# 运行前请务必拉取镜像
$ docker pull quay.io/sighup/trivy-offline
$ docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
quay.io/sighup/trivy-offline python:3.4-alpine
# 或
$ docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
quay.io/sighup/trivy-offline:$(date +%Y-%m-%d) python:3.4-alpine
如果发生错误,请重新拉取最新的quay.io/sighup/trivy-offline。
您可以在drone ci上扫描容器镜像(或任何公开可用的镜像)。以下是示例:
---
kind: pipeline
name: example
steps:
- name: scan
image: quay.io/sighup/trivy-offline:latest
pull: always
commands:
- trivy image --skip-update python:3.4-alpine
您可以在.gitlab-ci.yml中包含gitlab.yml。
此处trivy被定义为隐藏任务(hidden job),因此可以在同一流水线的任何阶段、任何任务中扩展多次。
您可以在gitlab ci上扫描自己的公开/私有容器镜像(或任何公开可用的镜像)。
默认情况下,如果未定义TRIVY_AUTH_URL、TRIVY_USERNAME和TRIVY_PASSWORD变量,则使用CI_REGISTRY、CI_REGISTRY_USER和CI_REGISTRY_PASSWORD来拉取私有Docker镜像。
在此示例中,默认情况下,trivy将扫描仓库容器 registry 中当前分支流水线对应的Docker镜像*(${CI_REGISTRY_IMAGE}/${CI_COMMIT_REF_NAME})*:
include:
- remote: 'https://raw.githubusercontent.com/sighupio/trivy-offline/main/gitlab.yml'
trivy:
extends: .trivy
stage: scan
以下示例中,我们手动指定Docker镜像:
trivy:
extends: .trivy
stage: scan
script:
- |
# node:alpine...
trivy image --skip-update node:alpine
您可以在circle ci上扫描容器镜像(或任何公开可用的镜像)。以下是示例:
test:
docker:
- image: quay.io/sighup/trivy-offline:latest
steps:
- run:
name: Run Aquasec trivy scanner
command: trivy image --exit-code 0 --format json --output trivy-container-scanning-report.json --no-progress --skip-update python:3.4-alpine
- store_artifacts:
path: trivy-container-scanning-report.json
destination: trivy-container-scanning-report
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
不支持 push
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务