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

如何用Docker Scout查看镜像包大小及解析大小显示差异

如何使用Docker Scout获取Docker镜像的SBOM详情

执行命令:

docker scout sbom --format list cgr.dev/chainguard/wolfi-base

输出如下:

NameVersionType
apk-tools2.14.4-r0apk
busybox1.36.1-r10apk
busybox1.36.1-r10apk
ca-certificates20240705-r0apk
ca-certificates-bundle20240705-r0apk
glibc2.40-r1apk
glibc2.40-r1apk
glibc-locale-posix2.40-r1apk
glibc-locale-posix2.40-r1apk
ld-linux2.40-r1apk
libcrypt12.40-r1apk
libcrypto33.3.1-r5apk
libssl33.3.1-r5apk
libxcrypt4.4.36-r7apk
openssl3.3.1-r5apk
wolfi-base1-r6apk
wolfi-baselayout20230201-r15apk
wolfi-keys1-r8apk
zlib1.3.1-r4apk

问题1:如何在上述输出右侧添加额外列显示镜像包大小?

能不能通过bash管道命令从外部提取大小信息手动添加,或者用Docker Scout的额外命令实现?

解答

Docker Scout的sbom命令目前没有直接输出包大小的参数,但可以通过bash管道结合工具手动添加:

  1. 先让Docker Scout输出JSON格式的SBOM,方便后续处理:
    docker scout sbom --format json cgr.dev/chainguard/wolfi-base > sbom.json
    
  2. 利用apk info命令获取每个包的大小——可以启动该镜像的临时容器来执行:
    docker run --rm -v "$(pwd)/sbom.json:/sbom.json" cgr.dev/chainguard/wolfi-base sh -c 'apk info -s $(jq -r '.artifacts[].name' /sbom.json) | awk "{print \$1, \$3}"' > package-sizes.txt
    
  3. 最后用简单的脚本(比如Python或bash脚本)把SBOM数据和大小数据合并,生成带Size列的表格。

另外也可以通过Wolfi的包仓库API查询每个包的大小,再和SBOM数据关联整合。


问题2:为何不同命令显示的镜像大小存在差异?

执行docker scout cves cgr.dev/chainguard/wolfi-base显示镜像总大小7.2MB,但docker image inspect显示"Size":15394739(约15.4MB),docker image ls也显示15.4MB,为啥Docker Scout显示的大小不一样?

解答

这是因为两类命令的大小计算逻辑完全不同:

  • docker image ls和docker image inspect统计的是镜像在本地磁盘的实际占用大小,包含所有镜像层、元数据,还有层之间的共享数据,而且是未压缩的存储体积。
  • Docker Scout显示的是镜像中所有软件包的压缩后体积总和,也就是Wolfi仓库里这些apk包的压缩大小,它只算应用层的软件包本身,不包含镜像元数据、共享层,用的是包的压缩态数值,所以比本地存储的大小小很多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 07:01:07