能否将docker save导出的镜像tar包目录传入Anchore内联扫描工具批量扫描?
核心结论
Anchore 内联扫描工具不支持直接传入存放多镜像tar包的目录路径做自动全量递归扫描,但可以通过极简单的循环逻辑实现目标目录下所有docker save导出镜像的批量扫描,操作成本和直接传目录没有差别。
工具本身的单文件扫描能力原生支持读取本地docker save导出的tar包,不需要提前把镜像load到本地Docker引擎,离线环境下也能正常运行。
具体实现方式
- 单镜像扫描的基础命令格式
对单个通过docker save生成的未压缩tar包,直接执行下述命令即可完成全量漏洞扫描,无需依赖Docker运行时:grype docker-archive:/绝对路径/单镜像.tar - 批量扫描整个目录的实现
因为工具不会自动识别目录下的tar文件,只需要写简单的遍历逻辑,循环对目录下每一个tar包执行上面的扫描命令即可。下面这个脚本基本在所有Linux扫描节点上都能直接跑:#!/bin/bash # 替换为你存放所有docker save tar包的专用目录 TAR_STORE_DIR="/data/docker_save_images" # 替换为扫描结果的存放目录 RESULT_SAVE_DIR="/data/anchore_scan_results" mkdir -p "$RESULT_SAVE_DIR" # 遍历目录下所有tar包 for tar_path in "$TAR_STORE_DIR"/*.tar; do # 避免目录里没有tar文件时脚本乱跑 [ -f "$tar_path" ] || continue # 用tar包文件名作为每个扫描结果的命名标识 target_name=$(basename "$tar_path" .tar) # 输出结构化JSON结果,方便后续批量归档、导入扫描平台 grype docker-archive:"$tar_path" -o json > "$RESULT_SAVE_DIR/${target_name}.json" # 输出表格形式的汇总结果,快速定位每个镜像的高危漏洞 grype docker-archive:"$tar_path" -o table > "$RESULT_SAVE_DIR/${target_name}_summary.txt" done
常见注意事项
- 如果你存的tar包是压缩格式(比如导出时用了gzip把tar包压缩成了.tar.gz),对应的扫描参数要把
docker-archive换成oci-archive,不然会报镜像格式不匹配的错 - 别试着直接把目录路径甩给扫描命令,这工具不会自己在目录里翻找可扫描的tar镜像,只会直接报路径格式错误
- 整个扫描过程不需要启动本地Docker守护进程,也不需要联网拉取漏洞库以外的内容,所有镜像分层的解析都是在本地离线完成的
内容的提问来源于stack exchange,提问作者slixperi
相关产品推荐
相关产品推荐

