为什么我新创建的码头工人没有摘要?

时间:2016-10-01 20:37:52

标签: docker digest

我一直关注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与否)?

3 个答案:

答案 0 :(得分:6)

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

Manifest是Docker注册表V2引入的新术语。以下是从Docker Registry V2 slides第21页〜第23页提取的简短说明:

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

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

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

  1. 此图片尚未推送到V2注册表或从V2注册表中提取。
  2. 此图片已从V1注册表中提取。
  3. 要生成清单,最简单的方法是将映像推送到V2注册表(V1注册表将无效)。 Docker客户端将在本地生成清单,然后将图像层推送到注册表。当您拉回图像时,图像将显示清单。

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

答案 1 :(得分:1)

是的,它与图像的创建方式有关。 Docker有时候会变成一个真正的臭味。

在这种情况下,

This可能对您有所帮助。

答案 2 :(得分:0)

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

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

此时,我正在使用来检查摘要值

docker images --digest

,摘要值为<none>

解决方案:

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