Docker Scout SBOMs

镜像分析利用镜像的SBOM(软件物料清单)来了解该镜像所包含的软件包及其版本。 Docker Scout 优先使用镜像中已有的SBOM证明(如可用,推荐使用)。 若镜像中无可用的SBOM证明,Docker Scout 将通过扫描镜像内容自行生成一份SBOM。

从命令行视图

要查看 Docker Scout 生成的 SBOM 内容,您可以使用 docker scout sbom 命令。

$ docker scout sbom [IMAGE]

默认情况下,此命令会以 JSON 格式将 SBOM 打印到标准输出。 docker scout sbom 生成的默认 JSON 格式并非 SPDX-JSON。 要输出 SPDX 格式,请使用 --format spdx 标志:

$ docker scout sbom --format spdx [IMAGE]

要生成人类可读的列表,请使用 --format list 标志:

$ docker scout sbom --format list alpine

           Name             Version    Type
───────────────────────────────────────────────
  alpine-baselayout       3.4.3-r1     apk
  alpine-baselayout-data  3.4.3-r1     apk
  alpine-keys             2.4-r1       apk
  apk-tools               2.14.0-r2    apk
  busybox                 1.36.1-r2    apk
  busybox-binsh           1.36.1-r2    apk
  ca-certificates         20230506-r0  apk
  ca-certificates-bundle  20230506-r0  apk
  libc-dev                0.7.2-r5     apk
  libc-utils              0.7.2-r5     apk
  libcrypto3              3.1.2-r0     apk
  libssl3                 3.1.2-r0     apk
  musl                    1.2.4-r1     apk
  musl-utils              1.2.4-r1     apk
  openssl                 3.1.2-r0     apk
  pax-utils               1.3.7-r1     apk
  scanelf                 1.3.7-r1     apk
  ssl_client              1.36.1-r2    apk
  zlib                    1.2.13-r1    apk

有关 docker scout sbom 命令的更多信息,请参阅 CLI 参考文档

附加为构建证明

您可以在构建时生成SBOM并将其附加到镜像中,作为声明(attestation)。BuildKit提供了一个默认的SBOM生成器,它与Docker Scout所使用的生成器不同。您可以通过为docker build命令使用--attest标志来配置BuildKit,以使用Docker Scout的SBOM生成器。Docker Scout的SBOM索引器可提供更丰富的结果,并确保与Docker Scout镜像分析具有更好的兼容性。

$ docker build --tag <org>/<image> \
  --attest type=sbom,generator=docker/scout-sbom-indexer:latest \
  --push .

要使用 SBOM 证明构建镜像,您必须使用以下两种方式之一:containerd 镜像存储功能,或使用 docker-container 构建器并配合 --push 标志将镜像(连同证明)直接推送到镜像仓库。经典镜像存储不支持清单列表(manifest lists)或镜像索引(image indices),而添加证明到镜像中需要此功能。

提取到文件

将镜像提取为 SPDX JSON 文件的命令, 取决于该镜像是否已推送到镜像仓库, 还是仅存在于本地。

远程镜像

要提取镜像的SBOM并将其保存到文件中,您可以使用 docker buildx imagetools inspect 命令。此命令仅适用于存储在镜像仓库中的镜像。

$ docker buildx imagetools inspect <image> --format "{{ json .SBOM }}" > sbom.spdx.json

本地镜像

要为本地镜像提取 SPDX 文件,请使用 local 导出器构建镜像,并使用 scout-sbom-indexer SBOM 生成器插件。

以下命令将SBOM保存到build/sbom.spdx.json位置的文件中。

$ docker build --attest type=sbom,generator=docker/scout-sbom-indexer:latest \
  --output build .