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

我一直在这里跟随Docker教程 ,并且在我的本地OSX机器上构build一个testing图像,通过对现有图像进行更改并使用三个不同的标签对其进行标记:

# 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创build的其他testing图像也有一个摘要。

为什么一些图像有一个消化,有些没有? 它与图像的创build方式(Dockerfile或不)有关?

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

Manifest是Docker registry V2引入的一个新术语。 这里是从Docker Registry V2中获取的简短描述page21〜page23:Manifest describes the components of an image in a single object - Layers can be fetched immediately, in parallel.

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

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

  1. 此图像尚未被推送到V2registry中。
  2. 此图像已从V1registry中提取。

要生成清单,最简单的方法是将图像推送到V2registry(V1registry不起作用)。 Docker客户端将在本地生成一个清单,然后将其与图像层一起推送到registry中。 当你拉回图像,图像将有一个清单。

一旦清单存在,您的图像摘要不应该是“无”。

是的,它与图像的创build方式有关。 有时候,Docker可能是一个真正的难题。

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

Interesting Posts