我在哪里可以找到docker图像的sha256代码?

时间:2015-08-17 08:57:28

标签: docker docker-registry

我想使用他们的sha256代码拉出centos,tomcat,...的图像,如

docker pull myimage@sha256:0ecb2ad60

但是我找不到可以在任何地方使用的sha256代码。

我在dockerhub存储库中检查了sha256代码的任何提示,但找不到任何提示。我按标签

下载了图片
docker pull tomcat:7-jre8

并使用docker inspect检查图像以查看元数据中是否有sha256代码,但没有(添加图像的sha256代码可能会更改sha256代码)。

我是否必须自己计算图像的sha256代码并使用它?

10 个答案:

答案 0 :(得分:49)

最新答案

OhJeez在评论中提出的修改。

docker inspect --format='{{index .RepoDigests 0}}' $IMAGE

原始答案

我相信你也可以使用

docker inspect --format='{{.RepoDigests}}' $IMAGE

仅适用于Docker 1.9,如果图像最初是由摘要提取的。 Details are on the docker issue tracker.

答案 1 :(得分:32)

您可以通过docker images --digests

获取
REPOSITORY          TAG    DIGEST                                                                    IMAGE ID     CREATED        SIZE
docker/ucp-agent    2.1.0  sha256:a428de44a9059f31a59237a5881c2d2cffa93757d99026156e4ea544577ab7f3   583407a61900 3 weeks ago    22.3 MB

答案 2 :(得分:15)

刚看到它:

当我拉图像时,sha256代码显示在输出的底部(Digest:sha ....):

docker pull tomcat:7-jre8
7-jre8: Pulling from library/tomcat
902b87aaaec9: Already exists 
9a61b6b1315e: Already exists 
...   
4dcef5c50d60: Already exists 
Digest: sha256:c34ce3c1fcc0c7431e1392cc3abd0dfe2192ffea1898d5250f199d3ac8d8720f
Status: Image is up to date for tomcat:7-jre8

这个沙码

  

SHA256:c34ce3c1fcc0c7431e1392cc3abd0dfe2192ffea1898d5250f199d3ac8d8720f

可以用

来拉动图像
  

docker pull tomcat @ sha256:c34ce3c1fcc0c7431e1392cc3abd0dfe2192ffea1898d5250f199d3ac8d8720f

通过这种方式,您可以确保图像不会更改,并且可以安全地用于生产。

答案 3 :(得分:3)

这应该是Id字段,您可以在旧deprecated Docker Hub API

中看到
GET /v1/repositories/foo/bar/images HTTP/1.1
  Host: index.docker.io
  Accept: application/json

Parameters:

namespace – the namespace for the repo
repo_name – the name for the repo
  

响应示例:

HTTP/1.1 200
Vary: Accept
Content-Type: application/json

[{"id": "9e89cc6f0bc3c38722009fe6857087b486531f9a779a0c17e3ed29dae8f12c4f",
"checksum": "b486531f9a779a0c17e3ed29dae8f12c4f9e89cc6f0bc3c38722009fe6857087"},
{"id": "ertwetewtwe38722009fe6857087b486531f9a779a0c1dfddgfgsdgdsgds",
"checksum": "34t23f23fc17e3ed29dae8f12c4f9e89cc6f0bsdfgfsdgdsgdsgerwgew"}]

但是 new docker distribution ,现在 它是如何工作的。
issue 628: "Get image ID with tag name"

  
    

/v1/注册表响应/repositories/<repo>/tags用于列出图片ID以及标记句柄     /v2/似乎只能提供处理。

         

将ID与本地找到的ID进行比较会很有用。我可以找到ID的唯一地方是清单的v1Compat部分(这对我想要的信息来说太过分了)

  

目前(2015年中)答案是:

  

对于图像存储在后端的方式,V1 API的这个属性在计算上非常昂贵。仅枚举标记名称以避免二次查找   此外,V2 API不处理图像ID。相反,它使用摘要来识别图层,这些图层可以作为图层的属性进行计算,并且可以独立验证。

答案 4 :(得分:3)

除了现有答案外,您还可以在执行--digests时使用docker images选项,以获取所有图像的摘要列表。

docker images --digests

您可以添加一个grep以进一步细化

docker images --digests | grep tomcat

答案 5 :(得分:1)

最简单,最简洁的方法是:

docker images --no-trunc --quiet $IMAGE

这只会返回sha256:...字符串,而不会返回其他任何内容。

例如:

$ docker images --no-trunc --quiet debian:stretch-slim
sha256:220611111e8c9bbe242e9dc1367c0fa89eef83f26203ee3f7c3764046e02b248

答案 6 :(得分:1)

您可以在从相应存储库中提取图像时找到它。贝娄命令提到了摘要:在提取docker映像时,sha256。

09:33 AM ##〜::> docker --version Docker版本19.03.4,内部版本9013bf5

摘要:sha256:6e9f67fa63b0323e9a1e587fd71c561ba48a034504fb804fd26fd8800039835d

09:28 AM##~::>docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
7ddbc47eeb70: Pull complete
c1bbdc448b72: Pull complete
8c3b70e39044: Pull complete
45d437916d57: Pull complete
**Digest: sha256:6e9f67fa63b0323e9a1e587fd71c561ba48a034504fb804fd26fd8800039835d**
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

图片下载完成后,我们可以执行以下操作

“ ubuntu @ sha256:6e9f67fa63b0323e9a1e587fd71c561ba48a034504fb804fd26fd8800039835d”

09:36 AM##~::>docker inspect ubuntu | grep -i sha256
        "Id": "sha256:775349758637aff77bf85e2ff0597e86e3e859183ef0baba8b3e8fc8d3cba51c",
            **"ubuntu@sha256:6e9f67fa63b0323e9a1e587fd71c561ba48a034504fb804fd26fd8800039835d"**
            "Image": "sha256:f0caea6f785de71fe8c8b1b276a7094151df6058aa3f22d2902fe6b51f1a7a8f",
            "Image": "sha256:f0caea6f785de71fe8c8b1b276a7094151df6058aa3f22d2902fe6b51f1a7a8f",
                "sha256:cc967c529ced563b7746b663d98248bc571afdb3c012019d7f54d6c092793b8b",
                "sha256:2c6ac8e5063e35e91ab79dfb7330c6154b82f3a7e4724fb1b4475c0a95dfdd33",
                "sha256:6c01b5a53aac53c66f02ea711295c7586061cbe083b110d54dafbeb6cf7636bf",
                "sha256:e0b3afb09dc386786d49d6443bdfb20bc74d77dcf68e152db7e5bb36b1cca638"

答案 7 :(得分:1)

我发现上述方法在某些情况下不起作用。他们要么:

  • 不能很好地处理具有相同哈希值的多个图像(在.RepoDigests建议的情况下-当您要使用特定的注册表路径时)
  • 将图像推送到注册表时效果不佳 (对于.Id,它是本地哈希,而不是 注册表)。

以下方法很精致,但是可以为特定的推送容器提取特定的完整“名称”和哈希。

在这种情况下-图像分别上传到同一仓库中的2个不同项目中,因此查询RepoDigests会返回2个结果。

$ docker inspect --format='{{.RepoDigests}}' gcr.io/alpha/homeapp:latest

[gcr.io/alpha/homeapp@sha256:ce7395d681afeb6afd68e73a8044e4a965ede52cd0799de7f97198cca6ece7ed gcr.io/beta/homeapp@sha256:ce7395d681afeb6afd68e73a8044e4a965ede52cd0799de7f97198cca6ece7ed]

我想使用alpha结果,但是我无法预测它将是哪个索引。因此,我需要操纵文本输出以删除括号,并将每个条目放在单独的行上。从那里我可以轻松地grep结果。

$ docker inspect --format='{{.RepoDigests}}' gcr.io/alpha/homeapp:latest | sed 's:^.\(.*\).$:\1:' | tr " " "\n" | grep alpha

gcr.io/alpha/homeapp@sha256:ce7395d681afeb6afd68e73a8044e4a965ede52cd0799de7f97198cca6ece7ed 

答案 8 :(得分:0)

只需再次发出docker pull tomcat:7-jre8即可获得所需内容。

答案 9 :(得分:0)

如@zelphir所述,使用摘要不是一种好方法,因为对于仅本地图像而言,不存在摘要。我认为图像ID sha在标签/拉动/推动等方面是最准确和一致的。

docker inspect --format='{{index .Id}}' $IMAGE

做到了。