Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

Просто однострочный скрипт: (найдите все теги 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. Вот сценарий оболочки.

#!/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'

Ответ 2

Как и в Docker Registry V2, достаточно простого GET:

GET /v2/<name>/tags/list

Подробнее см. docs.

Ответ 3

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

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

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

Ответ 4

Если вы хотите использовать 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"]'

Ответ 5

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 из ответа без проверки подлинности.

Ответ 6

См. утилиту 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

Ответ 8

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

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

Ответ 9

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

# 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

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

Ответ 10

Вот сценарий 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
}

Ответ 12

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", =)

Ответ 13

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

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

Ответ 14

Я сделал это, когда мне нужно было выполнить задачу, в которой, если пользователь каким-то образом введет неправильный тег, мы должны предоставить список всех тегов, присутствующих в репо (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 

Ответ 16

Используя конечные точки "/v2/_catalog" и "/tags/list", вы не сможете получить список всех изображений. Если вы нажали несколько разных изображений и отметили их как "последние", вы не сможете перечислить старые изображения! Вы можете по-прежнему тянуть их, если ссылаетесь на них с помощью дайджеста "docker pull ubuntu @sha256: ac13c5d2...". Таким образом, ответ - нет возможности перечислять изображения, вы можете перечислить только теги, которые не совпадают

Ответ 17

Вы можете достичь, запустив на терминале это:

curl -L -s 'https://registry.hub.docker.com/v2/repositories/library/mysql/tags/' | jq . | grep name

Кроме того, если у вас нет JQ, вы должны установить его по

sudo apt-get install jq

Ответ 18

Это встроенная функциональность Docker:

docker images gitlabregistry.domain.com/path/to-app

Результаты в

REPOSITORY                                  TAG                 IMAGE ID            CREATED             SIZE
gitlabregistry.domain.com/path/to-app       3.0.1               f60f49fba3e0        2 months ago        148MB
...