为何Grype扫描alpine镜像检出的包在容器内无法找到?
问题:Grype扫描alpine:latest检出的包在容器内无法找到
运行中的Docker容器内容
docker run -it alpine:latest sh / # ls -lh /var/lib/apk/ total 0
Grype扫描结果
我使用Grype对alpine Docker镜像进行扫描,结果如下:
grype alpine:latest NAME INSTALLED FIXED-IN TYPE VULNERABILITY SEVERITY libcrypto3 3.1.4-r2 3.1.4-r5 apk CVE-2024-0727 Medium libcrypto3 3.1.4-r2 3.1.4-r3 apk CVE-2023-6129 Medium libcrypto3 3.1.4-r2 3.1.4-r4 apk CVE-2023-6237 Unknown libssl3 3.1.4-r2 3.1.4-r5 apk CVE-2024-0727 Medium libssl3 3.1.4-r2 3.1.4-r3 apk CVE-2023-6129 Medium libssl3 3.1.4-r2 3.1.4-r4 apk CVE-2023-6237 Unknown
原因分析
- Alpine镜像的最小化设计:alpine:latest默认是精简镜像,不会保留
/var/lib/apk/下的安装数据库文件,容器启动后该目录为空,但包实际已经预装在系统中。 - Grype的扫描逻辑:Grype直接解析镜像的文件系统层,提取已安装包的文件特征,不需要依赖apk数据库,因此能检测到libcrypto3、libssl3这类系统核心依赖包。
验证包存在的方法
在容器内执行以下命令可确认包是否安装:
# 检查库文件是否存在 ls -lh /usr/lib/libcrypto.so.3 ls -lh /usr/lib/libssl.so.3 # 通过apk文件匹配查询 apk info --installed libcrypto3 libssl3
解决建议
如果需要在容器内保留apk数据库以便后续包管理,可在构建镜像时使用apk add --no-cache <包名>,或者启动容器后执行apk update生成数据库文件。
内容的提问来源于stack exchange,提问作者Noureddine Abdelmonem
相关产品推荐
相关产品推荐

