TL;DR:我无法理解为什么telegraf@sha256:05cbea951c5cf9da6c663321b32848c1b6ffdfa877563237838efa21b508b079
和telegraf@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 容器。我认为这会对图像的提取方式产生影响。
您正在将图像的旧图钉与使用新基础图像重建的图像进行比较:
对比一下旧版的图钉:
对于新标记的图像:
看起来 ARM 基础图像已更新,而 AMD64 基础图像未发生改变,并且图像可重复构建为相同的摘要。