Совместимость с реестром

Эта страница содержит информацию о размещении вашего собственного реестра с помощью реестр Docker с открытым исходным кодом. Для получения информации о Docker Hub, который предлагает размещенный реестр с дополнительными функциями, такими как группы, организации, веб-перехватчики, автоматические сборки и т.д., см. статью Docker Hub.

Синопсис

Если манифест извлекается с помощью дайджеста из реестра 2.3 с Docker Engine 1.9 и старше, а манифест был отправлен с помощью Docker Engine 1.10, проверка безопасности приводит к тому, что Engine получает манифест, который он не может использовать, и извлечение завершается неудачей.

Поддержка манифеста реестра

Исторически реестр поддерживал единственный тип манифеста, известный как Схема 1.

С переходом на несколько образов архитектуры проект распространения представил два новых типа манифестов: манифесты схемы 2 и списки манифестов. Реестр 2.3 поддерживает все три типа манифеста и иногда выполняет преобразовывает манифеста «на лету» перед отправкой JSON в ответ, чтобы сохраняет совместимость со старыми версиями Docker Engine.

Это преобразовывает имеет некоторые последствия для получения манифестов по дайджесту, и данный документ перечисляет данные последствия.

Хранилище с адресацией содержимого (CAS)

Манифесты хранятся и извлекаются в реестре путём отключения дайджеста, представляющего хэш содержимого. Одним из преимуществ, предоставляемых CAS, является безопасность: если содержимое изменено, то дайджест больше не совпадает. Это предотвращает любую модификацию манифеста атакой MITM или ненадежной третьей стороной.

Когда манифест хранится в реестре, данный дайджест возвращается в заголовках ответа HTTP и, если события настроены, доставляется в рамках события. Манифест можно получает либо по тегу, либо по этому дайджесту.

Для версий реестра 2.2.1 и далее реестр всегда хранит и обслуживает манифесты Schema 1. Механизм 1.10 сначала пытается отправить манифест Схемы 2, возвращаясь к отправке манифеста типа Схемы 1, когда обнаруживает, что реестр не поддерживает новую версию.

Реестр версии 2.3

Отправка манифеста с помощью Docker 1.10

Engine создаёт манифест Schema 2, который реестр сохраняет на диск.

Когда манифест извлекается с помощью дайджеста или тега с помощью Docker Engine 1.10, возвращается манифест Schema 2. Docker Engine 1.10 понимает новый формат манифеста.

Когда манифест извлекается с помощью тега с помощью Docker Engine 1.9 и более ранних версий, манифест на лету преобразуется в Схему 1 и отправляется в ответе. Docker Engine 1.9 совместим с этим старым форматом.

Когда манифест извлекается с помощью дайджеста с Docker Engine 1.9 и старше, такой же процесс перезаписи в реестре не происходит. В противном случае дайджест больше не будет соответствовать хешу манифеста и нарушит ограничения CAS.

По этой причине, если манифест извлекается с помощью дайджеста из реестра 2.3 с Docker Engine 1.9 и старше, а манифест был отправлен с помощью Docker Engine 1.10, проверка безопасности приводит к тому, что Engine получает манифест, который он не может использовать, и получение завершается неудачно. .

Отправка манифеста с помощью Docker 1.9 и более ранних версий

Docker Engine создаёт манифест Schema 1, который реестр сохраняет на диск.

Когда манифест извлекается с помощью дайджеста или тега с любой версией Docker, возвращается манифест Schema 1.