Недостаточная область при попытке получить каталог Docker Hub
Я пытаюсь получить каталог для Docker-концентратора, но пока что получаю сообщение об ошибке. Насколько я понимаю, мне нужно передать токен на предъявителя с запросом каталога, поэтому я начну с получения этого токена с соответствующей областью:
curl -u "username:password "https://auth.docker.io/token?service=registry.docker.io&scope=registry:catalog:*"
(это имя пользователя / пароль из моей учетной записи Docker Hub)
Затем я передаю возвращенный токен в реестр:
curl -vL -H "Authorization: Bearer eyJhbGciOiJFUzI1NiIsInR5cCI6I(...)" https://registry-1.docker.io/v2/_catalog
В ответ на этот запрос я получаю:
* Trying 54.86.130.73...
* Connected to registry-1.docker.io (54.86.130.73) port 443 (#0)
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
* Server certificate: *.docker.io
* Server certificate: RapidSSL SHA256 CA - G3
* Server certificate: GeoTrust Global CA
> GET /v2/_catalog HTTP/1.1
> Host: registry-1.docker.io
> User-Agent: curl/7.43.0
> Accept: */*
> Authorization: Bearer eyJhbGciOiJFUzI1NiIsInR5cCI6I(...)
>
< HTTP/1.1 401 Unauthorized
HTTP/1.1 401 Unauthorized
< Content-Type: application/json; charset=utf-8
Content-Type: application/json; charset=utf-8
< Docker-Distribution-Api-Version: registry/2.0
Docker-Distribution-Api-Version: registry/2.0
< Www-Authenticate: Bearer realm="https://auth.docker.io/token",service="registry.docker.io",scope="registry:catalog:*",error="insufficient_scope"
Www-Authenticate: Bearer realm="https://auth.docker.io/token",service="registry.docker.io",scope="registry:catalog:*",error="insufficient_scope"
< Date: Fri, 06 May 2016 23:00:08 GMT
Date: Fri, 06 May 2016 23:00:08 GMT
< Content-Length: 134
Content-Length: 134
< Strict-Transport-Security: max-age=31536000
Strict-Transport-Security: max-age=31536000
<
{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":[{"Type":"registry","Name":"catalog","Action":"*"}]}]}
... который, кажется, просит меня вернуться и авторизоваться с URL-адресом, который я ввел выше.
Должно ли это быть возможно? Если так, что я пропускаю?
2 ответа
Я получил ту же проблему, поднял ее с помощью поддержки докера и получил следующий ответ: "Конечная точка каталога не работает с Docker Hub, потому что эта конечная точка фактически перечисляет все репозитории в Реестре, и мы отключили ее, как если бы она перечисляла все репозитории на Docker Hub."
Если вы хотите получить информацию о хранилище для имени пользователя или организации, альтернативой является использование API V1. Проблема в том, что вам нужно совершать несколько звонков в зависимости от количества доступных репо.
Следующая команда выдаст репозитории, доступные для данного имени пользователя:
curl -k -H "Authorization: Basic <encripted username:password>" -H "Accept: application/json" -X GET "https://index.docker.io/v1/search?q=<username>&n=100"
Здесь q - запрос, а n - количество элементов, возвращаемых на каждой странице.
Еще один вызов может быть сделан на основе того, какие данные вам нужны, передавая репо в качестве параметра.