docker 图像的 sha256 散列在存储库之间是否不同?

Is the sha256 hash of a docker image different between repositories?

我刚刚将一个 docker 图像从一个存储库复制到另一个存储库,方法是从我们的 OpenShift 3.11 外部存储库中拉出一个明确的 sha256 哈希标签,将其重新标记到我们的 Harbor 1.9.2 存储库并推送该标签。

在那个过程中显示了新图像的 sha256 密钥,它与我开始使用的 sha256 密钥不同。这是出乎意料的,因为我没有对图像进行任何更改,只是为其分配了另一个标签,因此字节应该相同,给出相同的哈希值。

这是否意味着由于某种原因算法不同?存储库名称是否包含在哈希键计算中?或者别的什么?

您将图像 ID 摘要与图层摘要混淆了。如果您 docker inspect 这些图像,您会注意到底层摘要将完全匹配。

注册表中的每个图像都有一个图像 ID。 运行 docker images --digests --no-trunc 并注意您将看到摘要列和图像 ID 列,它们并不相同。摘要列是清单的摘要,在 docker inspect 输出中显示为 RepoDigests。如果清单包含名称和标签,那么摘要也会不同。

也尝试 diff <(docker inspect image_id_1) <(docker inspect image_id_2) 看看发生了什么。

有关更多详细信息,请参阅 this answer and this article