为什么消化不同取决于registry?

AFAIK,图像摘要是图像清单体的哈希。

当我从docker中心拉busybox图像,并将其推到我的私人registry,摘要变得不同。

 $ docker pull busybox ... Digest: sha256:2605a2c4875ce5eb27a9f7403263190cd1af31e48a2044d400320548356251c4 Status: Downloaded newer image for busybox:latest $ docker tag busybox myregistry/busybox $ docker push myregistry/busybox ... 08c2295a7fa5: Pushed latest: digest: sha256:8573b4a813d7b90ef3876c6bec33db1272c02f0f90c406b25a5f9729169548ac size: 527 $ docker images --digests myregistry/busybox latest sha256:8573b4a813d7b90ef3876c6bec33db1272c02f0f90c406b25a5f9729169548ac efe10ee6727f 2 weeks ago 1.13MB busybox latest sha256:2605a2c4875ce5eb27a9f7403263190cd1af31e48a2044d400320548356251c4 efe10ee6727f 2 weeks ago 1.13MB 

图像完全没有改变,图像ID相同。

但为什么图像摘要变得不同?


更新:

Weidly,来自另一个私人registry的摘要与我的私人registry的摘要完全相同。

 $ docker image inspect efe10ee6727f ... "RepoDigests": [ "myregistry/busybox@sha256:8573b4a813d7b90ef3876c6bec33db1272c02f0f90c406b25a5f9729169548ac", "busybox@sha256:2605a2c4875ce5eb27a9f7403263190cd1af31e48a2044d400320548356251c4", "anotherregistry/busybox@sha256:8573b4a813d7b90ef3876c6bec33db1272c02f0f90c406b25a5f9729169548ac" ], 

您正在查看的摘要是registry摘要,它与图像ID摘要不同。 您可以拥有一个具有多个registry摘要的单个图像ID,用于所有已推送的位置。 您可以在检查输出中看到两个ID:

 $ docker inspect busybox --format 'Id: {{.Id}} Repo Digest: {{index .RepoDigests 0}}' Id: sha256:efe10ee6727fe52d2db2eb5045518fe98d8e31fdad1cbdd5e1f737018c349ebb Repo Digest: busybox@sha256:2605a2c4875ce5eb27a9f7403263190cd1af31e48a2044d400320548356251c4 

我还没有深入研究registry代码,但是看清楚的规范,仓库的名称(即“myregistry / busybox”)是它生成的摘要的一部分。 所以,每次从不同的存储库(即使在同一个registry服务器上),你都会得到不同的摘要。

清单规范在这里定义: https : //docs.docker.com/registry/spec/api/#manifest

PUT显示:

 PUT /v2/<name>/manifests/<reference> Host: <registry host> Authorization: <scheme> <token> Content-Type: <media type of manifest> { "name": <name>, "tag": <tag>, "fsLayers": [ { "blobSum": "<digest>" }, ... ] ], "history": <v1 images>, "signature": <JWS> } 

然后查看registry代码,该json用于计算PUT方法中的摘要: https : //github.com/docker/distribution/blob/55ea4404280f1ca15a982a9421b9713fdc145be8/registry/handlers/manifests.go#L254