为什么我新创建的docker没有摘要?

发布于 2021-02-01 13:01:18

我一直在关注Docker教程,并通过对现有映像进行更改并用三个不同的标签对其进行标记,在本地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)有关吗?

关注者
0
被浏览
113
1 个回答
  • 面试哥
    面试哥 2021-02-01
    为面试而生,有面试问题,就找面试哥。

    首先,请记住,摘要可以代表一个manifest,一个图层或它们的组合(我们通常将该组合称为图像)。

    Manifest是Docker注册表V2引入的一个新术语。以下是从Docker Registry
    V2幻灯片

    page21〜page23中获取的简短说明:

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

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

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

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

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

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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看