it-roy-ru.com

Как перечислить все теги для образа Docker в удаленном реестре?

Я хотел бы знать, как перечислить все теги образа Docker в удаленном реестре Docker ( tutum в нашем случае, но я не думаю, что это имеет значение), используя CLI (предпочтительно) или curl? Желательно, не вытягивая все версии из удаленного реестра, я просто хочу перечислить теги.

101
Johan

Я получил ответ от здесь . Большое спасибо! :)

Просто однострочный скрипт: (найдите все теги Debian)

wget -q https://registry.hub.docker.com/v1/repositories/debian/tags -O -  | sed -e 's/[][]//g' -e 's/"//g' -e 's/ //g' | tr '}' '\n'  | awk -F: '{print $3}'

ОБНОВЛЕНИЕ Спасибо за совет @ degelf . Вот сценарий Shell.

#!/bin/bash

if [ $# -lt 1 ]
then
cat << HELP

dockertags  --  list all tags for a Docker image on a remote registry.

EXAMPLE: 
    - list all tags for ubuntu:
       dockertags ubuntu

    - list all php tags containing Apache:
       dockertags php Apache

HELP
fi

image="$1"
tags=`wget -q https://registry.hub.docker.com/v1/repositories/${image}/tags -O -  | sed -e 's/[][]//g' -e 's/"//g' -e 's/ //g' | tr '}' '\n'  | awk -F: '{print $3}'`

if [ -n "$2" ]
then
    tags=` echo "${tags}" | grep "$2" `
fi

echo "${tags}"

Вы можете просто создать новое имя файла, dockertags, в/usr/local/bin (или добавить PATH env к своему .bashrc/.zshrc), и вставить этот код в него. Затем добавьте права на исполняемый файл (chmod +x dockertags).

Использование:

dockertags ubuntu ---> перечислить все теги Ubuntu

dockertags php Apache ---> перечислить все php теги php, содержащие 'Apache' 

87
Vi.Ci

Начиная с Docker Registry V2, достаточно простого GET:

GET /v2/<name>/tags/list

Смотрите документы для более.

50
Yan Foto

Мне удалось заставить его работать с помощью curl:

curl -u <username>:<password> https://tutum.co/v1/repositories/<username>/<image_name>/tags

Обратите внимание, что image_name не должен содержать сведения о пользователе и т.д. Например, если вы нажимаете изображение с именем tutum.co/username/x, тогда image_name должен быть x.

15
Johan

Если вы хотите использовать API Docker Registry v2, в нем перечислены теги по страницам. Чтобы перечислить все теги изображения, вы можете добавить к URL-адресу большой параметр page_size, например,.

curl -L -s 'https://registry.hub.docker.com/v2/repositories/library/centos/tags?page_size=1024'|jq '."results"[]["name"]'
14
0xCC

API Docker V2 требует токен-носитель OAuth с соответствующими утверждениями. На мой взгляд, официальная документация по этой теме довольно расплывчата. Чтобы другие не переживали ту же боль, что и я, я предлагаю функцию docker-tags ниже.

Самую последнюю версию docker-tags можно найти в моем GitHubGist: «Список тегов изображения Docker с использованием bash»

Функция docker-tags зависит от jq . Если вы играете с JSON, скорее всего, у вас уже есть.

#!/usr/bin/env bash
docker-tags() {
    arr=("[email protected]")

    for item in "${arr[@]}";
    do
        tokenUri="https://auth.docker.io/token"
        data=("service=registry.docker.io" "scope=repository:$item:pull")
        token="$(curl --silent --get --data-urlencode ${data[0]} --data-urlencode ${data[1]} $tokenUri | jq --raw-output '.token')"
        listUri="https://registry-1.docker.io/v2/$item/tags/list"
        authz="Authorization: Bearer $token"
        result="$(curl --silent --get -H "Accept: application/json" -H "Authorization: Bearer $token" $listUri | jq --raw-output '.')"
        echo $result
    done
}

Пример

docker-tags "Microsoft/nanoserver" "Microsoft/dotnet" "library/mongo" "library/redis"

Следует признать, что docker-tags делает несколько предположений. В частности, параметры запроса OAuth в основном жестко запрограммированы. Более амбициозная реализация создаст запрос к реестру без проверки подлинности и получит параметры OAuth из ответа без проверки подлинности.

5
RobV8R

См. Утилиту CLI: https://www.npmjs.com/package/docker-browse

Позволяет перечислять теги и изображения.

docker-browse tags <image> перечислит все теги для изображения. например docker-browse tags library/Alpine

docker-browse images перечислит все изображения в реестре. В настоящее время недоступно для index.docker.io.

Вы можете подключить его к любому реестру, включая ваш частный, при условии, что он поддерживает Docker Registry HTTP API V2

3
Alex Courtis

Основываясь на ответе Яна Фото ( v2 api ), я создал простой скрипт Python для вывода списка тегов для данного изображения .

Использование:

./docker-registry-list.py Alpine

Результат:

{
  "name": "library/Alpine",
  "tags": [
    "2.6",
    "2.7",
    "3.1",
    "3.2",
    "3.3",
    "3.4",
    "3.5",
    "3.6",
    "3.7",
    "Edge",
    "latest"
  ]
}
3
Alex Forbes

Вот сценарий Powershell, который я написал для Windows. Обрабатывает репо v1 и v2:

Get-DockerImageVersions.ps1:

param (
  [Parameter (Mandatory=$true)]$ImageName,
  [Parameter (Mandatory=$false)]$RegistryURL
)

if (!$RegistryURL) 
{
  $RegistryURL = "https://registry.hub.docker.com/v1/repositories"
}

$list = ""
if ($RegistryURL -like "*v2*") 
{
  $list = "/list"
}

$URL = "$RegistryURL/$ImageName/tags$list"

write-debug $URL
$resp = Invoke-WebRequest -UseBasicParsing $URL | ConvertFrom-Json

if ($RegistryURL -like "*v2*") 
{
  $tags = $resp | select tags
  $tags.tags
} else {
  $tags = $resp | select name
  $tags.name
}
1
Steve W

Вы также можете использовать этот лом:

# vim /usr/sbin/docker-tags 

& Добавить следующее (как есть):

#!/bin/bash
im="$1"
[[ -z "$im" ]] && { echo -e '\e[31m[-]\e[39m Where is the image name ??' ; exit ; }
[[ -z "$(echo "$im"| grep -o '/')" ]] && { link="https://hub.docker.com/r/library/$im/tags/" ; } || { link="https://hub.docker.com/r/$im/tags/" ; }
resp="$(curl -sL "$link")"
err="$(echo "$resp" | grep -o 'Page Not Found')"
if [[ ! -z "$err" ]] ; then
    echo -e "\e[31m[-]\e[39m No Image Found with name => [ \e[32m$im\e[39m ]"
    exit
else
    tags="$(echo "$resp"|sed  -e 's|}|\n|g' -e 's|{|\n|g'|grep '"result"'|sed -e 's|,|\n|g'|cut -d '[' -f2|cut -d ']' -f1|sed  '/"tags":/d'|sed -e 's|"||g')"
    echo -e "\e[32m$tags\e[39m"
fi

Сделайте его исполняемым:

# chmod 755 /usr/sbin/docker-tags

Тогда, наконец, попробуйте:

$ docker-tags testexampleidontexist
   [-] No Image Found with name => [ testexampleidontexist ]

$ docker search ubuntu

$ docker-tags teamrock/ubuntu
   latest

[Надеюсь, вы знаете о $ & # перед выполнением любой команды]

1
Mr. Pundir
curl -u <username>:<password> https://$your_registry/v2/$image_name/tags/list -s -o - | \
    tr -d '{' | tr -d '}' | sed -e 's/[][]//g' -e 's/"//g' -e 's/ //g' | \
    awk -F: '{print $3}' | sed -e 's/,/\n/g'

Вы можете использовать его, если в вашем env нет jq, =)

1
SwenChan

API реестра Docker имеет конечную точку для перечисления всех тегов

Похоже, у Tutum есть аналогичная конечная точка , а также способ доступа через tutum-cli .

С tutum-cli попробуйте следующее:

tutum tag list <uuid>
1
Alex

Получить все теги из Docker Hub: эта команда использует командную строку JSON процессор jq , чтобы выбрать имена тегов из JSON, возвращенного реестром Docker Hub (кавычки удаляются с помощью tr). Замените library на имя пользователя Docker Hub, debian на имя образа:

curl -s 'https://registry.hub.docker.com/v2/repositories/library/debian/tags/' | jq -r '."results"[]["name"]'
1
jamlee

Я сделал это, когда мне нужно было выполнить задачу, в которой, если пользователь каким-то образом введет неправильный тег, мы должны предоставить список всех тегов, присутствующих в репо (Docker repo), присутствующих в реестре…. есть код в пакетном скрипте.

<html>
<pre style="background-color:#bcbbbb;">
@echo off

docker login --username=xxxx --password=xxxx
docker pull %1:%2

IF NOT %ERRORLEVEL%==0 (
echo "Specified Version is Not Found "
echo "Available Version for this image is :"
for /f %%i in (' curl -s -H "Content-Type:application/json" -X POST -d "{\"username\":\"user\",\"password\":\"password\"}" https://hub.docker.com/v2/users/login ^|jq -r .token ') do set TOKEN=%%i
curl -sH "Authorization: JWT %TOKEN%" "https://hub.docker.com/v2/repositories/%1/tags/" | jq .results[].name
)
</pre>
</html>

Таким образом, в этом мы можем дать аргументы для нашего командного файла, например: 

Dockerfile Java version7 

0
Vatsal Garg

Если инструмент синтаксического анализа JSON, jq доступен

wget -q https://registry.hub.docker.com/v1/repositories/debian/tags -O - | \
    jq -r .[].name
0
sigjuice