首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DockerHub:沙文摘不匹配

DockerHub:沙文摘不匹配
EN

Stack Overflow用户
提问于 2019-12-24 04:10:41
回答 4查看 6K关注 0票数 13

我想在DockerHub中为最新的停靠者图像确定sha摘要:

如果我试图提取最新的图片,我可以看到摘要。

代码语言:javascript
复制
# docker pull mysql:latest
...
Digest: sha256:c93ba1bafd65888947f5cd8bd45deb7b996885ec2a16c574c530c389335e9169
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest

所以摘要是c93ba1

但如果我去https://hub.docker.com我会看到

因此,有两个消化:511ca265b41c9a355d5c4ec0

此外,如果我试图使用任何指定的摘要:

代码语言:javascript
复制
# docker pull mysql@sha256:9a355d5c4ec0351a954b11b494c597cd4e6ab2c8a04ce69c5f8332819890c43e
Error response from daemon: manifest for mysql@sha256:9a355d5c4ec0351a954b11b494c597cd4e6ab2c8a04ce69c5f8332819890c43e not found: manifest unknown: manifest unknown
代码语言:javascript
复制
# docker pull mysql@sha256:511ca265b41cabb694fda409b8ae87fb0a83db15cfb8429d581c33c7aafacddf
Error response from daemon: manifest for mysql@sha256:511ca265b41cabb694fda409b8ae87fb0a83db15cfb8429d581c33c7aafacddf not found: manifest unknown: manifest unknown

但是,如果我尝试使用我从拉命令中得到的命令,它是有效的:

代码语言:javascript
复制
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上重复相同的过程

代码语言:javascript
复制
docker pull mysql:8
8: Pulling from library/mysql
...
Digest: sha256:f91e704ffa9f19b9a267d9321550a0772a1b64902226d739d3527fd6edbe3dfe
Status: Downloaded newer image for mysql:8
docker.io/library/mysql:8

然后在码头枢纽

然后

代码语言:javascript
复制
docker image inspect mysql:8
[
    {
        "Id": "sha256:c8ad2be69a220e93826a6308458627b8d5624dc981050fabf950e5de5a7a08a8",
        "RepoTags": [
            "mysql:8"
        ],
        "RepoDigests": [
            "mysql@sha256:f91e704ffa9f19b9a267d9321550a0772a1b64902226d739d3527fd6edbe3dfe"
        ]

代码语言:javascript
复制
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:a592539c5a616b6642bb48822688b6917b373a1293638f9268e8da33e5e9dd1c
代码语言:javascript
复制
docker 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上做同样的操作时:

代码语言:javascript
复制
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

所以我不知道这里发生了什么

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-05-20 20:09:18

根据这个github评论,显然,CLI在计算sha256摘要时使用包含所有不同机器体系结构选项的清单,而DockerHub页面上的每个摘要都使用仅包含该特定体系结构的清单进行计算。

更新:我已经有一段时间没有跟踪这个消息了,所以我不记得细节了,但是要了解更多信息,请访问此页。我认为这与图像清单的sha和清单列表的sha之间的区别有关.

票数 21
EN

Stack Overflow用户

发布于 2022-05-22 19:07:12

当拖放映像时,您看到的是清单列表的摘要或OCI索引,当图像被打包为多平台映像时(即使该打包只有一个平台)。使用问题中的示例:

代码语言:javascript
复制
$ 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,它可以做到这一点。

票数 4
EN

Stack Overflow用户

发布于 2022-05-29 13:15:50

这不是一个特性,而且它有一个开放的长期运行的Github问题这里,在这里您可以插入并更新它,以便更快地修复它。

在类似的问题中,您还可以找到一个使用curl并将获得正确的服务器端摘要的解决方案脚本:https://stackoverflow.com/a/64309017/9962007

否则,CLI仍然与集线器,甚至docker inspect不同步。例如:

码头枢纽(链接):

代码语言:javascript
复制
bitnami/minideb:buster
Digest:sha256:b4d0417f742c591cad881ba5458719edb2b8166103413ffc4e1e480455892097

相对于本地docker inspect

代码语言:javascript
复制
IMAGE_NAME_TAGGED=bitnami/minideb:buster && docker inspect $IMAGE_NAME_TAGGED | grep sha
        "Id": "sha256:0def18b69c0b60f4d4ceb22f5aad596dffbb6d1b6089aff15158a4cde5276e2d",
            "bitnami/minideb@sha256:0a96a8ec61c52b638c824bc3463c9009844d80d5e2b1dfe77b6c10a31a27684d"
                "sha256:4c16ec6258b6cd4630c3d8e7c1389981064e2719d560d5f08b9cfff1082fa86f"

我不确定切换到podman是否会改善情况,因为在重新打开的问题中,用户描述了与摘要不匹配的类似问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59463729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档