You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法用Anchore Grype扫描本地未推送镜像的CVE,求解决方案

问题

显然,除非Docker镜像已预先推送至镜像仓库,否则无法使用Anchore Grype对其进行漏洞(CVE)安全扫描。这导致它目前无法用于拦截仓库中的漏洞镜像——因为镜像推送后,扫描完成前,带有严重CVE的受感染镜像可能会被不知情的用户立即拉取(在镜像被撤回前)。

问题复现步骤

  • 使用docker build构建镜像,不推送至镜像仓库。
  • 尝试用grype扫描本地镜像,出现如下错误:
$ ./scan-with-grype-dockerized.sh mirekphd/ml-cache:20230726
[0000]  INFO grype version: 0.64.2
1 error occurred:
    * failed to catalog: unable to load image: unable to use OciRegistry source: failed to get image descriptor from registry: GET https://index.docker.io/v2/mirekphd/ml-cache/manifests/20230726: MANIFEST_UNKNOWN: manifest unknown; unknown tag=20230726
解决方案

1. 直接扫描本地Docker镜像

Grype本身支持扫描本地Docker守护进程中的镜像,无需推送至远程仓库。你遇到的错误是因为扫描脚本默认从远程仓库拉取镜像,而非读取本地镜像。

修改扫描命令,指定扫描本地镜像:

# 方式1:明确指定本地镜像源
grype docker-daemon:mirekphd/ml-cache:20230726

# 方式2:使用docker协议,Grype会优先尝试本地镜像
grype docker://mirekphd/ml-cache:20230726

如果是用容器化的Grype脚本,需要让容器能访问本地Docker守护进程,修改scan-with-grype-dockerized.sh脚本:

#!/bin/bash
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock anchore/grype:latest docker-daemon:$1

2. 构建-扫描-推送的CI/CD流水线管控

在镜像发布流程中加入前置扫描环节,从根源阻止漏洞镜像流入仓库:

  • 构建镜像后立即执行本地扫描
  • 配置扫描阈值:若发现严重(Critical)或高危(High)级别的CVE,直接终止流水线,不推送镜像
  • 仅当扫描结果符合安全标准时,才将镜像推送至正式仓库

3. 本地临时仓库中转(可选)

如果业务场景必须依赖仓库方式扫描,可以搭建本地私有临时仓库:

  • 构建镜像后先推送到本地临时仓库(如用Docker官方registry容器搭建)
  • 使用Grype扫描本地临时仓库中的镜像
  • 扫描通过后,再将镜像同步到正式远程仓库
  • 本地临时仓库仅用于内部扫描,不对外暴露,避免用户拉取未验证的镜像

内容的提问来源于stack exchange,提问作者mirekphd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 11:22:56