当前位置: 首页 > 面试题库 >

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

胡桐
2023-03-14
问题内容

我一直在关注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)有关吗?


问题答案:

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

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

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

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

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

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

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

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

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



 类似资料:
  • 我最近在springboot和flyway一起工作,我有这样一个问题。为什么flyway没有创建数据库?我刚刚在我的build.gradle中添加了一个flyway依赖项,现在看起来是这样的。 我这样配置数据源: 这里是我的Hibernate。属性: 和迁移文件,位于resources/db/migration中: 有什么问题?是否应该在Application.Properties中配置datas

  • 我有一个码头工人。编写文件,当我启动它时,我希望它创建一个包含一些表的数据库。 我的码头工人组成: 项目结构: 实际的 SQL 文件: -- 主机:本地主机 数据库:待办事项 --服务器版本8.0.18 /*!40101 SET@OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT /; /! 40101 SET@OLD_CHARACTER_SET_RES

  • 在这篇文章之后——docker:“build”需要一个参数。请参阅“docker build--help”,我试图在Mac 10.13.6上使用一个非传统名称(“local.Dockerfile”)的文件来构建我的docker映像。我试过下面的方法 但docker让我窒息了。我运行的是19.03.5版。

  • 我想用springboot和Mongo数据库对话。 它使用spring-boot-starter-data-mongoDB并自动配置默认bean,这确实允许我的MongoRepository类与DB进行对话。 但是,我想重写默认值。我可以使用application.properties,但我需要能够在应用程序启动时将连接参数作为选项在命令行上传递。 我已经尝试改变端口以破坏它,我已经将debug添

  • 是我在复制时做错了什么,还是有办法不缓存特定的步骤?

  • 今天我在家里的电脑上安装了netbean,以便在家做一些工作。我安装了java 8 JDK(151),并安装了包含所有内容的netbean(没有进行自定义安装)。然后我把我的项目从github上撤下来。 我的安装文件夹是在E:\netbean我的项目文件夹是默认的c: 我加载了项目,打开XAMPP并运行它。太好了,很管用。 然后我对HTML进行了更改(修复了我犯的一个拼写错误)。再次运行。找不到零