Где я могу найти код sha256 образа докера?

Я хотел бы вытащить образы centos, tomcat,... используя их код sha256, как в

docker pull [email protected]:0ecb2ad60

но я не могу найти код sha256 для использования в любом месте.

Я проверил хранилище dockerhub на наличие любого намека на код sha256, но не смог найти ни одного. Я скачал изображения по их тегам

docker pull tomcat:7-jre8

и проверил изображение с помощью окна docker inspect чтобы увидеть, есть ли в метаданных код sha256, но его нет (добавление кода изображения sha256, вероятно, изменит код sha256).

Нужно ли самому вычислять код sha256 изображения и использовать его?

Ответ 1

Просто увидел:

Когда я вытягиваю изображение, код sha256 дублируется в нижней части вывода (Digest: sha....):

docker pull tomcat:7-jre8
7-jre8: Pulling from library/tomcat
902b87aaaec9: Already exists 
9a61b6b1315e: Already exists 
...   
4dcef5c50d60: Already exists 
Digest: sha256:c34ce3c1fcc0c7431e1392cc3abd0dfe2192ffea1898d5250f199d3ac8d8720f
Status: Image is up to date for tomcat:7-jre8

Этот ша-код

sha256: c34ce3c1fcc0c7431e1392cc3abd0dfe2192ffea1898d5250f199d3ac8d8720f

можно использовать, чтобы вытащить изображение с помощью

docker pull tomcat @sha256: c34ce3c1fcc0c7431e1392cc3abd0dfe2192ffea1898d5250f199d3ac8d8720f

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

Ответ 2

Последний ответ

Редактировать предложенный OhJeez в комментариях.

docker inspect --format='{{index .RepoDigests 0}}' $IMAGE

Оригинальный ответ

Я считаю, что вы также можете получить это с помощью

docker inspect --format='{{.RepoDigests}}' $IMAGE

Работает только в Docker 1.9 и если изображение было изначально извлечено дайджестом. Подробности на трекере проблем докера.

Ответ 3

Вы можете получить его с помощью docker images --digests

REPOSITORY          TAG    DIGEST                                                                    IMAGE ID     CREATED        SIZE
docker/ucp-agent    2.1.0  sha256:a428de44a9059f31a59237a5881c2d2cffa93757d99026156e4ea544577ab7f3   583407a61900 3 weeks ago    22.3 MB

Ответ 4

Это должно было быть поле Id, которое вы могли видеть в старой устаревшей API-интерфейс Docker Hub

GET /v1/repositories/foo/bar/images HTTP/1.1
  Host: index.docker.io
  Accept: application/json

Parameters:

namespace – the namespace for the repo
repo_name – the name for the repo

Пример ответа:

HTTP/1.1 200
Vary: Accept
Content-Type: application/json

[{"id": "9e89cc6f0bc3c38722009fe6857087b486531f9a779a0c17e3ed29dae8f12c4f",
"checksum": "b486531f9a779a0c17e3ed29dae8f12c4f9e89cc6f0bc3c38722009fe6857087"},
{"id": "ertwetewtwe38722009fe6857087b486531f9a779a0c1dfddgfgsdgdsgds",
"checksum": "34t23f23fc17e3ed29dae8f12c4f9e89cc6f0bsdfgfsdgdsgdsgerwgew"}]

НО: теперь это не так, как сейчас работает с новым распределением докеров.
См. вопрос 628: "Получить идентификатор изображения с именем тега"

Ответ /v1/ ответа на реестр /repositories/<repo>/tags, используемый для отображения идентификатора изображения вместе с дескриптором тега.
  /v2/ только, кажется, дает ручку.

     

Было бы полезно получить идентификатор для сравнения с идентификатором, найденным локально. Единственное место, где я могу найти идентификатор, находится в разделе v1Compat манифеста (который является излишним для информации, которую я хочу)

Текущий (средний 2015) ответ:

Это свойство API-интерфейса V1 было очень дорогостоящим, поскольку способ хранения изображений на бэкэнд. Только имена тегов перечислены, чтобы избежать вторичного поиска.
Кроме того, API V2 не имеет отношения к идентификаторам изображений. Скорее, он использует дайджесты для идентификации слоев, которые могут быть рассчитаны как свойство слоя и независимо проверяемы.

Ответ 5

В дополнение к существующим ответам, вы можете использовать --digests во время выполнения docker images чтобы получить список дайджестов для всех ваших изображений.

docker images --digests

Вы можете добавить grep, чтобы углубить детали

docker images --digests | grep tomcat

Ответ 6

Просто выпустите docker pull tomcat:7-jre8 снова, и вы получите то, что хотите.

Ответ 7

Более новые версии докера должны поддерживать это:

$ docker image inspect --format='{{.ID}}' node:10.9-alpine
sha256:df2d34f007a1b8faeff432f21fc0839e135ef567d73aac5bae9f0bcf5007f6ac
$ docker -v
Docker version 18.06.1-ce, build e68fc7a