我想在DockerHub中为最新的停靠者图像确定sha摘要:
如果我试图提取最新的图片,我可以看到摘要。
# docker pull mysql:latest
...
Digest: sha256:c93ba1bafd65888947f5cd8bd45deb7b996885ec2a16c574c530c389335e9169
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest所以摘要是c93ba1
但如果我去https://hub.docker.com我会看到

因此,有两个消化:511ca265b41c和9a355d5c4ec0。
此外,如果我试图使用任何指定的摘要:
# docker pull mysql@sha256:9a355d5c4ec0351a954b11b494c597cd4e6ab2c8a04ce69c5f8332819890c43e
Error response from daemon: manifest for mysql@sha256:9a355d5c4ec0351a954b11b494c597cd4e6ab2c8a04ce69c5f8332819890c43e not found: manifest unknown: manifest unknown# docker pull mysql@sha256:511ca265b41cabb694fda409b8ae87fb0a83db15cfb8429d581c33c7aafacddf
Error response from daemon: manifest for mysql@sha256:511ca265b41cabb694fda409b8ae87fb0a83db15cfb8429d581c33c7aafacddf not found: manifest unknown: manifest unknown但是,如果我尝试使用我从拉命令中得到的命令,它是有效的:
docker pull mysql@sha256:c93ba1bafd65888947f5cd8bd45deb7b996885ec2a16c574c530c389335e9169
sha256:c93ba1bafd65888947f5cd8bd45deb7b996885ec2a16c574c530c389335e9169: Pulling from library/mysql
Digest: sha256:c93ba1bafd65888947f5cd8bd45deb7b996885ec2a16c574c530c389335e9169
Status: Image is up to date for mysql@sha256:c93ba1bafd65888947f5cd8bd45deb7b996885ec2a16c574c530c389335e9169
docker.io/library/mysql@sha256:c93ba1bafd65888947f5cd8bd45deb7b996885ec2a16c574c530c389335e9169我做错了什么?有没有办法在不拉图像的情况下消化?
更新:再次使用DockerDesktop2.2在MacOs上重复相同的过程
docker pull mysql:8
8: Pulling from library/mysql
...
Digest: sha256:f91e704ffa9f19b9a267d9321550a0772a1b64902226d739d3527fd6edbe3dfe
Status: Downloaded newer image for mysql:8
docker.io/library/mysql:8然后在码头枢纽

然后
docker image inspect mysql:8
[
{
"Id": "sha256:c8ad2be69a220e93826a6308458627b8d5624dc981050fabf950e5de5a7a08a8",
"RepoTags": [
"mysql:8"
],
"RepoDigests": [
"mysql@sha256:f91e704ffa9f19b9a267d9321550a0772a1b64902226d739d3527fd6edbe3dfe"
]和
docker pull mysql@sha256:a592539c5a616b6642bb48822688b6917b373a1293638f9268e8da33e5e9dd1c
sha256:a592539c5a616b6642bb48822688b6917b373a1293638f9268e8da33e5e9dd1c: Pulling from library/mysql
Digest: sha256:a592539c5a616b6642bb48822688b6917b373a1293638f9268e8da33e5e9dd1c
Status: Downloaded newer image for mysql@sha256:a592539c5a616b6642bb48822688b6917b373a1293638f9268e8da33e5e9dd1c
docker.io/library/mysql@sha256:a592539c5a616b6642bb48822688b6917b373a1293638f9268e8da33e5e9dd1cdocker pull mysql@sha256:f91e704ffa9f19b9a267d9321550a0772a1b64902226d739d3527fd6edbe3dfe
sha256:f91e704ffa9f19b9a267d9321550a0772a1b64902226d739d3527fd6edbe3dfe: Pulling from library/mysql
Digest: sha256:f91e704ffa9f19b9a267d9321550a0772a1b64902226d739d3527fd6edbe3dfe
Status: Image is up to date for mysql@sha256:f91e704ffa9f19b9a267d9321550a0772a1b64902226d739d3527fd6edbe3dfe
docker.io/library/mysql@sha256:f91e704ffa9f19b9a267d9321550a0772a1b64902226d739d3527fd6edbe3dfe当我在Linux上做同样的操作时:
sudo docker pull mysql:8
8: Pulling from library/mysql
...
Digest: sha256:f91e704ffa9f19b9a267d9321550a0772a1b64902226d739d3527fd6edbe3dfe
Status: Downloaded newer image for mysql:8
docker.io/library/mysql:8所以我不知道这里发生了什么
发布于 2020-05-20 20:09:18
根据这个github评论,显然,CLI在计算sha256摘要时使用包含所有不同机器体系结构选项的清单,而DockerHub页面上的每个摘要都使用仅包含该特定体系结构的清单进行计算。
更新:我已经有一段时间没有跟踪这个消息了,所以我不记得细节了,但是要了解更多信息,请访问此页。我认为这与图像清单的sha和清单列表的sha之间的区别有关.
发布于 2022-05-22 19:07:12
当拖放映像时,您看到的是清单列表的摘要或OCI索引,当图像被打包为多平台映像时(即使该打包只有一个平台)。使用问题中的示例:
$ regctl manifest get mysql@sha256:f91e704ffa9f19b9a267d9321550a0772a1b64902226d739d3527fd6edbe3dfe --format body | jq .
{
"manifests": [
{
"digest": "sha256:a592539c5a616b6642bb48822688b6917b373a1293638f9268e8da33e5e9dd1c",
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"platform": {
"architecture": "amd64",
"os": "linux"
},
"size": 2828
}
],
"mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
"schemaVersion": 2
}这是一个码头清单列表,其中包含一个特定于平台的清单(用于linux/amd64 64),其中包含您在docker上报告的摘要sha256:a592539c5a616b6642bb48822688b6917b373a1293638f9268e8da33e5e9dd1c。Docker跟踪拉上的清单列表,但当拉到码头引擎时,它总是将多平台映像解压缩到单个平台。
通常,当将摘要固定在部署中时,需要使用多平台摘要。这允许在不同的平台上使用相同的摘要,但在这种特殊情况下,这就不那么重要了。为了获得这个摘要,可以使用regclient、crane和skopeo这样的工具。并且buildx还包括一个隐藏的命令docker buildx imagetools inspect,它可以做到这一点。
发布于 2022-05-29 13:15:50
这不是一个特性,而且它有一个开放的长期运行的Github问题这里,在这里您可以插入并更新它,以便更快地修复它。
在类似的问题中,您还可以找到一个使用curl并将获得正确的服务器端摘要的解决方案脚本:https://stackoverflow.com/a/64309017/9962007。
否则,CLI仍然与集线器,甚至docker inspect不同步。例如:
码头枢纽(链接):
bitnami/minideb:buster
Digest:sha256:b4d0417f742c591cad881ba5458719edb2b8166103413ffc4e1e480455892097相对于本地docker inspect
IMAGE_NAME_TAGGED=bitnami/minideb:buster && docker inspect $IMAGE_NAME_TAGGED | grep sha
"Id": "sha256:0def18b69c0b60f4d4ceb22f5aad596dffbb6d1b6089aff15158a4cde5276e2d",
"bitnami/minideb@sha256:0a96a8ec61c52b638c824bc3463c9009844d80d5e2b1dfe77b6c10a31a27684d"
"sha256:4c16ec6258b6cd4630c3d8e7c1389981064e2719d560d5f08b9cfff1082fa86f"我不确定切换到podman是否会改善情况,因为在这重新打开的问题中,用户描述了与摘要不匹配的类似问题。
https://stackoverflow.com/questions/59463729
复制相似问题