Некоторое время назад я наткнулся на статью под названием Проверка образов Docker без их извлечения, в котором подробно описываются конкретные вызовы API, необходимые для выполнения docker inspect
вызовов REST. Однако мне интересно, не изменилось ли что-то в API реестра Docker с тех пор, как была написана эта статья.
В статье говорится, что вам нужно сделать три вызова REST, чтобы получить информацию о контейнере. В случае публичного реестра Docker они следующие:
Запрос GET к auth.docker.io для получения токена
curl "https://auth.docker.io/token?scope=repository:<image>:pull&service=registry.docker.io"
В этом случае
image
может быть что-то вродеnginx
илиdocker
- в основном любое изображение, которое вы ищете. Этот вызов REST возвращает токен для использования в последующих запросах.Запрос GET для получения списков манифестов
curl -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -H "Authorization: Bearer <token-from-step-1>" "https://registry-1.docker.io/v2/<image>/manifests/<tag>"
Здесь
image
то же, что и в шаге 1, аtag
может быть что-то вродеlatest
. Этот вызов возвращает некоторый JSON; ключ в том, что нам нужно извлечь значение в.config.digest
. Это дайджест-строка, которую мы используем в последнем запросе.Наконец, запрос GET для получения конфигурации контейнера, используя дайджест, который мы получили на шаге 2.
curl -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -H "Authorization: Bearer <token-from-step-1>" "https://registry-1.docker.io/v2/<image>/blobs/<digest-from-step-2>"
Это возвращает некоторый JSON, и меня интересует поле
.config
Я смог успешно протестировать это в частном реестре Docker, хотя там мне пришлось сделать что-то другое для auth. Однако у меня возникает противоположная проблема, когда я пытаюсь следовать руководству (которое я изложил в этих шагах выше) для общедоступного реестра Docker: Шаг 1 дает мне токен, но этот токен бесполезен. Всякий раз, когда я пытаюсь использовать его на шагах 2 или 3, я получаю следующее:
{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":[{"Type":"repository","Class":"","Name":"docker","Action":"pull"}]}]}
Любые идеи о том, как заставить это работать?
docker
, иnginx
. - person soapergem   schedule 01.04.2019