TL;DR:我无法理解为什么telegraf@sha256:05cbea951c5cf9da6c663321b32848c1b6ffdfa877563237838efa21b508b079telegraf@sha256:848201b0601513122f567a6b690b5ef84abbb38e78ca461d1c1d3d7465691d39是相同的图像telegraf:1.31,而前者却在任何地方都没有提到。我几乎可以肯定这些是完全相同的图像,但我试图了解未知的来源sha256:05cbea9

我正在一台主机上工作,注意到 Telegraf 的 Docker 镜像有两个存储库摘要,这引起了一些好奇,因为我希望只看到索引摘要或索引摘要和 linux/amd64 摘要,因为该镜像是多架构镜像,主机是 linux/amd64。

当我跑步时:

docker inspect 4fffb7e682428f97779fdee3f4c44d062de6da9ba4a754a0f3b3f0ecaf87052e在服务器上,我得到以下输出:

        "RepoDigests": [
            "telegraf@sha256:05cbea951c5cf9da6c663321b32848c1b6ffdfa877563237838efa21b508b079",
            "telegraf@sha256:6b0d623c54754958fed356d2af239de21dcf7c95d63b76298d0cd70df79cc719"
        ],

第二个摘要似乎没问题,因为它代表索引摘要。但是,当我检查 Docker Hub 的 API 时,根本没有提到第一个摘要(05cbea…):

curl -s https://hub.docker.com/v2/namespaces/library/repositories/telegraf/tags/1.31 | jq '.images[] | "\(.architecture) \(.digest)"' | grep 05cbea951c5cf9da6c663321b32848c1b6ffdfa877563237838efa21b508b079
# Grep returns an empty result here

curl -s https://hub.docker.com/v2/namespaces/library/repositories/telegraf/tags/1.31 | jq '.images[] | "\(.architecture) \(.digest)"' | grep amd64
"amd64 sha256:848201b0601513122f567a6b690b5ef84abbb38e78ca461d1c1d3d7465691d39"

然而,它们仍然是同一张图像。以下是我检查的方法:

第一个哈希;

docker pull telegraf@sha256:05cbea951c5cf9da6c663321b32848c1b6ffdfa877563237838efa21b508b079

docker images|grep telegraf
telegraf                                                                  <none>      4fffb7e68242   4 weeks ago     472MB

docker inspect 4fffb7e68242 --format='{{json .}}'| jq '"\(.Created) \(.Config.Env[1]) \(.RepoDigests)"'
"2024-08-12T15:27:35Z TELEGRAF_VERSION=1.31.3 [\"telegraf@sha256:05cbea951c5cf9da6c663321b32848c1b6ffdfa877563237838efa21b508b079\"]"

第二个哈希;

docker pull telegraf@sha256:848201b0601513122f567a6b690b5ef84abbb38e78ca461d1c1d3d7465691d39
docker images|grep telegraf
telegraf                                                                  <none>      4fffb7e68242   4 weeks ago     472MB

docker inspect 4fffb7e68242 --format='{{json .}}'| jq '"\(.Created) \(.Config.Env[1]) \(.RepoDigests)"'
"2024-08-12T15:27:35Z TELEGRAF_VERSION=1.31.3 [\"telegraf@sha256:848201b0601513122f567a6b690b5ef84abbb38e78ca461d1c1d3d7465691d39\"]"

我想知道我这里遗漏了什么。任何提示我都会很感激。

编辑;
我唯一忘记提到的事情是由 docker swarm 堆栈运行的 telegraf 容器。我认为这会对图像的提取方式产生影响。


最佳答案
1

您正在将图像的旧图钉与使用新基础图像重建的图像进行比较:

$ regctl image digest telegraf:1.31
sha256:6b0d623c54754958fed356d2af239de21dcf7c95d63b76298d0cd70df79cc719

对比一下旧版的图钉:

$ docker buildx imagetools inspect telegraf@sha256:05cbea951c5cf9da6c663321b32848c1b6ffdfa877563237838efa21b508b079
Name:      docker.io/library/telegraf@sha256:05cbea951c5cf9da6c663321b32848c1b6ffdfa877563237838efa21b508b079
MediaType: application/vnd.oci.image.index.v1+json
Digest:    sha256:05cbea951c5cf9da6c663321b32848c1b6ffdfa877563237838efa21b508b079

Manifests:
  Name:        docker.io/library/telegraf@sha256:848201b0601513122f567a6b690b5ef84abbb38e78ca461d1c1d3d7465691d39
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    linux/amd64
  Annotations:
    org.opencontainers.image.url:             https://hub.docker.com/_/telegraf
    org.opencontainers.image.version:         1.31
    com.docker.official-images.bashbrew.arch: amd64
    org.opencontainers.image.base.digest:     sha256:66e568a0a9e5131643f75cea2fe66c8b45cc0395469455b5769ec2f051ee687b
    org.opencontainers.image.base.name:       buildpack-deps:bookworm-curl
    org.opencontainers.image.created:         2024-09-05T00:09:53Z
    org.opencontainers.image.revision:        426ed76c51f465daebb33547e3bb9632b974440f
    org.opencontainers.image.source:          https://github.com/influxdata/influxdata-docker.git#426ed76c51f465daebb33547e3bb9632b974440f:telegraf/1.31

  Name:        docker.io/library/telegraf@sha256:2a62640c6c53a3deea2ef3848d66f2e39ff8674da9e55d8b4114f7ddc9a1b3bb
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    unknown/unknown
  Annotations:
    com.docker.official-images.bashbrew.arch: amd64
    vnd.docker.reference.digest:              sha256:848201b0601513122f567a6b690b5ef84abbb38e78ca461d1c1d3d7465691d39
    vnd.docker.reference.type:                attestation-manifest

  Name:        docker.io/library/telegraf@sha256:8ab2fcde5e8d5ae97676fa951049c91135adc065a30e0cd4dae5daef50665e42
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    linux/arm/v7
  Annotations:
    org.opencontainers.image.base.digest:     sha256:8ac69ca67724de8c39cb2e7713440ce46aca8326fccccd92d854145a4c486a36
    org.opencontainers.image.base.name:       buildpack-deps:bookworm-curl
    org.opencontainers.image.created:         2024-08-14T00:31:20Z
    org.opencontainers.image.revision:        426ed76c51f465daebb33547e3bb9632b974440f
    org.opencontainers.image.source:          https://github.com/influxdata/influxdata-docker.git#426ed76c51f465daebb33547e3bb9632b974440f:telegraf/1.31
    org.opencontainers.image.url:             https://hub.docker.com/_/telegraf
    org.opencontainers.image.version:         1.31
    com.docker.official-images.bashbrew.arch: arm32v7

  Name:        docker.io/library/telegraf@sha256:2a1644b24ec3f214b33e4388d95ad4bf1e482a071ec24b625acd7d975f26d6c9
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    unknown/unknown
  Annotations:
    com.docker.official-images.bashbrew.arch: arm32v7
    vnd.docker.reference.digest:              sha256:8ab2fcde5e8d5ae97676fa951049c91135adc065a30e0cd4dae5daef50665e42
    vnd.docker.reference.type:                attestation-manifest

  Name:        docker.io/library/telegraf@sha256:7303af7d29d74d38605bfc94fd62d936ea8d42fed1515695e94d189a98c3537d
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    linux/arm64/v8
  Annotations:
    org.opencontainers.image.revision:        426ed76c51f465daebb33547e3bb9632b974440f
    org.opencontainers.image.source:          https://github.com/influxdata/influxdata-docker.git#426ed76c51f465daebb33547e3bb9632b974440f:telegraf/1.31
    org.opencontainers.image.url:             https://hub.docker.com/_/telegraf
    org.opencontainers.image.version:         1.31
    com.docker.official-images.bashbrew.arch: arm64v8
    org.opencontainers.image.base.digest:     sha256:8b5f3df20dc4d7dd3c5e730a8353ffa21a6ccb9d444507ebcc302cc3eaf6f3cf
    org.opencontainers.image.base.name:       buildpack-deps:bookworm-curl
    org.opencontainers.image.created:         2024-08-13T19:51:17Z

  Name:        docker.io/library/telegraf@sha256:14a0be6cc37a23c99d9488415fa573f12dd555eb3a567a347fb4e89f6f91f819
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    unknown/unknown
  Annotations:
    vnd.docker.reference.digest:              sha256:7303af7d29d74d38605bfc94fd62d936ea8d42fed1515695e94d189a98c3537d
    vnd.docker.reference.type:                attestation-manifest
    com.docker.official-images.bashbrew.arch: arm64v8

对于新标记的图像:

$ docker buildx imagetools inspect telegraf:1.31
Name:      docker.io/library/telegraf:1.31
MediaType: application/vnd.oci.image.index.v1+json
Digest:    sha256:6b0d623c54754958fed356d2af239de21dcf7c95d63b76298d0cd70df79cc719

Manifests:
  Name:        docker.io/library/telegraf:1.31@sha256:848201b0601513122f567a6b690b5ef84abbb38e78ca461d1c1d3d7465691d39
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    linux/amd64
  Annotations:
    org.opencontainers.image.source:          https://github.com/influxdata/influxdata-docker.git#426ed76c51f465daebb33547e3bb9632b974440f:telegraf/1.31
    org.opencontainers.image.url:             https://hub.docker.com/_/telegraf
    org.opencontainers.image.version:         1.31
    com.docker.official-images.bashbrew.arch: amd64
    org.opencontainers.image.base.digest:     sha256:66e568a0a9e5131643f75cea2fe66c8b45cc0395469455b5769ec2f051ee687b
    org.opencontainers.image.base.name:       buildpack-deps:bookworm-curl
    org.opencontainers.image.created:         2024-09-05T00:09:53Z
    org.opencontainers.image.revision:        426ed76c51f465daebb33547e3bb9632b974440f

  Name:        docker.io/library/telegraf:1.31@sha256:2a62640c6c53a3deea2ef3848d66f2e39ff8674da9e55d8b4114f7ddc9a1b3bb
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    unknown/unknown
  Annotations:
    com.docker.official-images.bashbrew.arch: amd64
    vnd.docker.reference.digest:              sha256:848201b0601513122f567a6b690b5ef84abbb38e78ca461d1c1d3d7465691d39
    vnd.docker.reference.type:                attestation-manifest

  Name:        docker.io/library/telegraf:1.31@sha256:18ee367acddef6bc891ae4edf18785ecf75d7ce476c9c559baa36d06e58a27a1
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    linux/arm/v7
  Annotations:
    org.opencontainers.image.base.digest:     sha256:5f2f9b35615c65ef5907c414739f3c797f3ffed0d930f9dd7b804fb44c6e2f8a
    org.opencontainers.image.base.name:       buildpack-deps:bookworm-curl
    org.opencontainers.image.created:         2024-09-06T04:14:41Z
    org.opencontainers.image.revision:        426ed76c51f465daebb33547e3bb9632b974440f
    org.opencontainers.image.source:          https://github.com/influxdata/influxdata-docker.git#426ed76c51f465daebb33547e3bb9632b974440f:telegraf/1.31
    org.opencontainers.image.url:             https://hub.docker.com/_/telegraf
    org.opencontainers.image.version:         1.31
    com.docker.official-images.bashbrew.arch: arm32v7

  Name:        docker.io/library/telegraf:1.31@sha256:06658911b19998c722152953ae140cd59e9be6fd7d10efce48dc0be4c7549c20
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    unknown/unknown
  Annotations:
    com.docker.official-images.bashbrew.arch: arm32v7
    vnd.docker.reference.digest:              sha256:18ee367acddef6bc891ae4edf18785ecf75d7ce476c9c559baa36d06e58a27a1
    vnd.docker.reference.type:                attestation-manifest

  Name:        docker.io/library/telegraf:1.31@sha256:8ab8223cf42035683913aac257a4a0bef2da657b9a1f9b6b82a25230789fe10f
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    linux/arm64/v8
  Annotations:
    org.opencontainers.image.base.name:       buildpack-deps:bookworm-curl
    org.opencontainers.image.created:         2024-09-05T20:30:15Z
    org.opencontainers.image.revision:        426ed76c51f465daebb33547e3bb9632b974440f
    org.opencontainers.image.source:          https://github.com/influxdata/influxdata-docker.git#426ed76c51f465daebb33547e3bb9632b974440f:telegraf/1.31
    org.opencontainers.image.url:             https://hub.docker.com/_/telegraf
    org.opencontainers.image.version:         1.31
    com.docker.official-images.bashbrew.arch: arm64v8
    org.opencontainers.image.base.digest:     sha256:3ecd6e86b392efaaa7b0ccfc022e224fe6542a1c5a76865b63fbe3362af4e489

  Name:        docker.io/library/telegraf:1.31@sha256:c3bffc37d556833052d636c8f9bf84c7db5f8a05ed0fe726ad051efba5fa8c3f
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    unknown/unknown
  Annotations:
    com.docker.official-images.bashbrew.arch: arm64v8
    vnd.docker.reference.digest:              sha256:8ab8223cf42035683913aac257a4a0bef2da657b9a1f9b6b82a25230789fe10f
    vnd.docker.reference.type:                attestation-manifest

看起来 ARM 基础图像已更新,而 AMD64 基础图像未发生改变,并且图像可重复构建为相同的摘要。

1

  • 让我感到困惑的是,如果我拉取 1.31 并拉取其05cbea9顶部,我会看到两个摘要,但现在我明白了它的工作原理。感谢您花时间帮助我。我非常感激。


    –