Получить теги изображений Docker из стороннего репозитория - PullRequest
1 голос
/ 09 мая 2019

Для изображений Docker, которые поступают прямо из Docker Hub, я могу получить текущий список тегов для изображения, нажав API репозитория. Например, https://registry.hub.docker.com/v1/repositories/python/tags даст мне список тегов, которые можно использовать с docker pull python:<tag>.

Для Elastic Search я использую их официальный репозиторий и могу вытащить изображение, используя что-то вроде docker pull docker.elastic.co/elasticsearch/elasticsearch:6.4.0

Однако я не могу понять, как получить список тегов из этого хранилища. Я пробовал

https://docker.elastic.co/elasticsearch/elasticsearch/tags
https://docker.elastic.co/v1/repositories/elasticsearch
https://docker.elastic.co/v2/repositories/elasticsearch/elasticsearch/_manifests/tags

.. и несколько других вариаций. В какие конечные точки URL / API инструмент командной строки docker переводит это имя репозитория / изображения в бэкэнд-запрос?

Ответы [ 2 ]

1 голос
/ 09 мая 2019

Оказывается, что docker.elastic.co работает с реестром док-станции V2, поэтому для него требуются команды API V2 и аутентификация токена.Попытка первоначально получить теги приводит к 401 с информацией о том, как получить токен:

http https://docker.elastic.co/v2/elasticsearch/elasticsearch/tags/list                                                                                                                       (566ms)  
HTTP/1.1 401 Unauthorized
Connection: keep-alive
Content-Length: 170
Content-Type: application/json; charset=utf-8
Date: Thu, 09 May 2019 15:24:42 GMT
Docker-Distribution-Api-Version: registry/2.0
Www-Authenticate: Bearer realm="https://docker-auth.elastic.co/auth",service="token-service",scope="repository:elasticsearch/elasticsearch:pull"
X-Content-Type-Options: nosniff

{
    "errors": [
        {
            "code": "UNAUTHORIZED",
            "detail": [
                {
                    "Action": "pull",
                    "Class": "",
                    "Name": "elasticsearch/elasticsearch",
                    "Type": "repository"
                }
            ],
            "message": "authentication required"
        }
    ]
}

Используйте информацию в WWW-Authenticate, чтобы запросить токен для данных service и scope:

http "https://docker-auth.elastic.co/auth?service=token-service&scope=repository:elasticsearch/elasticsearch:pull"                                                                            (567ms)  
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 790
Content-Type: application/json
Date: Thu, 09 May 2019 15:25:37 GMT

{
    "token": "some-long-token"
}

Наконец, сделайте запрос, используя токен:

http -v https://docker.elastic.co/v2/elasticsearch/elasticsearch/tags/list 'Authorization: Bearer some-long-token'
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 1765
Content-Type: application/json; charset=utf-8
Date: Thu, 09 May 2019 15:26:18 GMT
Docker-Distribution-Api-Version: registry/2.0
X-Content-Type-Options: nosniff

{
    "name": "elasticsearch/elasticsearch",
    "tags": [
        "5.0.0-731e78df",
        "5.0.0-86a0b164",
        "5.0.0-alpha5",
        "5.0.0-beta1",
        "5.0.0-ccd69424",
        "5.0.0-rc1",
        "5.0.0",
        ...
        ...
        ...
0 голосов
/ 09 мая 2019

Вы можете попробовать то же самое, что и для python, чтобы получить теги / список доступных версий.

пример: https://registry.hub.docker.com/v1/repositories/elasticsearch/tags

образец Outp: [{"layer": "", "name": "1"}, {"layer": "", "name": "1-alpine"}]

Итак, что вы пытаетесь сделать, вы предоставите список / показать список тегов в сценарии оболочки и попросите их выбрать.Затем, исходя из того, что вы будете выполнять извлечение и запуск этих команд в своем настраиваемом файле Docker?

...