【问题标题】:Why doesn't my newly-created docker have a digest?为什么我新创建的 docker 没有摘要?
【发布时间】:2017-02-10 04:41:21
【问题描述】:

我一直关注Docker tutorial here,并通过提交对现有图像的更改并使用三个不同的标签对其进行标记,在我的本地 OSX 机器上构建了一个测试图像:

# docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
adamatan/sinatra         devel               fccb6b4d21b4        8 minutes ago       469.5 MB
adamatan/sinatra         junk                fccb6b4d21b4        8 minutes ago       469.5 MB
adamatan/sinatra         latest              fccb6b4d21b4        8 minutes ago       469.5 MB

但是,这些图片都没有摘要:

# docker images --digests adamatan/sinatra
REPOSITORY          TAG                 DIGEST              IMAGE ID            CREATED             SIZE
adamatan/sinatra    devel               <none>              fccb6b4d21b4        9 minutes ago       469.5 MB
adamatan/sinatra    junk                <none>              fccb6b4d21b4        9 minutes ago       469.5 MB
adamatan/sinatra    latest              <none>              fccb6b4d21b4        9 minutes ago       469.5 MB

我使用 Dockerfile 创建的其他测试映像确实有摘要。

为什么有些图片有摘要而有些没有?是否与创建镜像的方式有关(Dockerfile 与否)?

【问题讨论】:

    标签: docker digest


    【解决方案1】:

    首先,请记住,摘要可以表示manifest、图层或它们的组合(我们通常将这种组合称为图像)。

    Manifest 是 Docker Registry V2 引入的一个新术语。以下是从Docker Registry V2 slides page21 ~ page23 ​​获取的简短描述:

    • [Manifest] 描述单个对象中图像的组成部分
      • 可以立即并行获取图层。

    当你使用命令docker images --digests获取摘要时,这里的摘要是图像清单的SHA256哈希,但图像ID是本地图像JSON配置的哈希码(此配置与清单不同)。在这种情况下,如果图像没有关联的清单,则该图像的摘要将为“无”。

    通常,有两种情况会使图像没有关联的清单:

    1. 此映像尚未推送到 V2 注册表或从 V2 注册表中提取。
    2. 此图像已从 V1 注册表中提取。

    要生成清单,最简单的方法是将图像推送到 V2 注册表(V1 注册表不起作用)。 Docker 客户端将在本地生成清单,然后将其与图像层一起推送到注册表。当您拉回图像时,图像将具有清单。

    清单存在后,您的图像摘要不应为“无”。

    【讨论】:

    • 有一个新的“实验性”docker manifest 命令 - 但它仍然不能完全满足用户的实际需求,即。在本地为缺少的图像生成清单。
    【解决方案2】:

    是的,它与图像的创建方式有关。 Docker 有时会很臭。

    This 在这种情况下可能对您有所帮助。

    【讨论】:

    • 这太疯狂了 - docker inspect &lt;image&gt; 会打印摘要,即使 docker images --digests 会打印 &lt;none&gt;
    • 是的。不知道该怎么想。漏洞?故意设计?如果你仔细想想,Docker 是很复杂的。我会把手放在虫子上。将提交给他们。
    • @EdRandall 谢谢你。我被一个无关的脚手架问题发疯了,这有很大帮助。
    【解决方案3】:

    我也遇到过这个问题(没有摘要)。

    原因是我可以在 docker images 中列出 docker 图像和图像。

    此时,我正在使用

    检查摘要值
    docker images --digest
    

    摘要值为&lt;none&gt;

    分辨率:

    将图像推送到您的 docker 存储库中,然后图像将显示摘要值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多