2016-10-01 2 views
0

Я был после 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 или нет)?

ответ

1

Во-первых, имейте в виду, что дайджест может представлять собой manifest, слой или их комбинацию (мы обычно называем эту комбинацию изображением).

Manifest - новый термин, введенный с реестром Docker V2. Вот краткое описание извлекается из Docker Registry V2 slides 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 является хэш-кодом локального изображения JSON (эта конфигурация отличается от манифеста). В этом случае, если изображение не имеет связанного манифеста, дайджест этого изображения будет «none».

Обычно два сценария может сделать изображение не ассоциировали манифеста:

  1. Это изображение не толкнул или вытащил из реестра V2.
  2. Это изображение было извлечено из реестра V1.

Чтобы сгенерировать манифест, самый простой способ - переместить изображение в реестр V2 (реестр V1 не будет работать). Клиент Docker будет генерировать манифест локально, а затем нажимать на него с помощью слоев изображения в реестр. Когда вы потянете изображение назад, изображение будет иметь манифест.

Как только манифест существует, ваш дайджест изображения не должен быть «ничем».

0

Да, это связано с тем, как были созданы изображения. Докер может быть реальной стервой время от времени.

This может быть вам полезен в этом случае.