注册表兼容性

预计阅读时间:3分钟

该页面包含有关使用开源Docker Registry托管自己的注册表的信息。有关Docker Hub的信息,它提供了托管注册表以及其他功能,例如团队,组织,Web挂钩,自动构建等,请参阅Docker Hub

概要

如果清单是通过摘要从Docker Engine 1.9和更低版本的注册表2.3中提取的,而清单是使用Docker Engine 1.10推送的,则安全检查将导致Engine接收到它无法使用的清单,并且提取失败。

注册表清单支持

从历史上看,注册表支持 称为Schema 1单个清单类型

随着向多个体系结构映像的发展,分发项目引入了两种新的清单类型:模式2清单和清单列表。Registry 2.3支持所有三种清单类型,有时会在响应中提供JSON之前对清单进行即时转换,以保持与旧版本Docker Engine的兼容性。

此转换对于通过摘要提取清单有一些含义,本文档列举了这些含义。

内容可寻址存储(CAS)

通过键入表示内容哈希值的摘要,可以在注册表中存储和检索清单。CAS提供的优点之一是安全性:如果更改了内容,则摘要将不再匹配。这样可以防止由MITM攻击或不受信任的第三方对清单进行任何修改。

注册表存储清单时,此摘要将在HTTP响应标头中返回,并且如果配置了事件,则在事件内进行传递。清单可以通过标签或此摘要来检索。

对于2.2.1及更低版本的注册表,注册表始终存储并提供Schema 1清单。引擎1.10首先尝试发送Schema 2清单,当检测到注册表不支持新版本时,回退到发送Schema 1类型的清单。

注册表v2.3

Docker 1.10上的清单推送

引擎构造一个架构2清单,注册表将其持久保存到磁盘。

当清单通过Docker Engine 1.10的摘要或标记进行提取时,将 返回Schema 2清单。Docker Engine 1.10了解新的清单格式。

当使用Docker Engine 1.9及更早版本的标签通过清单拉取清单时,清单会即时转换为Schema 1并在响应中发送。Docker Engine 1.9与此旧格式兼容。

当使用Docker Engine 1.9及更早版本的摘要通过清单提取清单时,注册表中不会发生相同的重写过程。如果是这样,则摘要将不再与清单的哈希匹配,并且将违反CAS的约束。

因此,如果清单是通过摘要从Docker Engine 1.9和更早版本的注册表2.3中提取的,而清单是使用Docker Engine 1.10推送的,则安全检查会使引擎接收到它无法使用的清单,并且提取失败。

Docker 1.9及更早版本的清单推送

Docker Engine会构建一个Schema 1清单,该注册表会持久保存在磁盘上。

当清单通过摘要或带有任何Docker版本的标签进行提取时,将 返回Schema 1清单。

注册表清单图像标签存储库分布摘要