Docker Scout SBOM

镜像分析使用镜像 SBOM 来了解镜像包含哪些包和版本。 Docker Scout 使用 SBOM 证明(如果镜像上可用)(推荐)。 如果没有可用的 SBOM 证明,Docker Scout 会通过为镜像内容编制索引来创建一个。

从 CLI 查看

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

$ docker scout sbom [IMAGE]

默认情况下,这会将 SBOM 以 JSON 格式打印到 stdout。 生成的默认 JSON 格式docker scout sbom不是 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 并将其在构建时作为证明附加到镜像。BuildKit 提供了一个默认的 SBOM 生成器,这与 Docker Scout 使用的生成器不同。 您可以将 BuildKit 配置为使用 Docker Scout SBOM 生成器 使用--attestflag 的docker build命令。 Docker Scout SBOM 索引器提供更丰富的结果 并确保与 Docker Scout 镜像分析的更好兼容性。

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

要使用 SBOM 证明构建镜像,您必须使用 containerd Image Store 功能,或使用docker-containerbuilder 与--pushflag 推送镜像(带有证明) 直接发送到注册表。经典镜像存储不支持清单列表 或 Image Indices,这是向镜像添加证明所必需的。

提取到文件

将镜像的 SBOM 提取到 SPDX JSON 文件的命令是 根据镜像是否已推送到注册表,或者是否 它是一个本地镜像。

远程镜像

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

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

本地镜像

要提取本地镜像的 SPDX 文件,请使用localexporter 并使用scout-sbom-indexerSBOM 生成器插件。

以下命令将 SBOM 保存到build/sbom.spdx.json.

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