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。
我刚刚将一个 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。