Я хотел бы знать, как перечислить все теги образа Docker в удаленном реестре Docker, используя CLI (предпочтительно) или curl? Желательно, не вытягивая все версии из удаленного реестра, я просто хочу перечислить теги.
Как просмотреть все теги для изображения Docker в удаленном реестре?
Ответ 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
Ответ 7
Основываясь на ответе Yan Foto (API v2), я создал простой скрипт на 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"
]
}
Ответ 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
}
Ответ 11
API реестра Docker имеет конечную точку для перечисления всех тегов.
Похоже, у Tutum есть аналогичная конечная точка, а также способ доступа через tutum-cli.
С tutum-cli попробуйте следующее:
tutum tag list <uuid>
Ответ 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
Ответ 15
Чтобы просмотреть все доступные теги в браузере:
https://registry.hub.docker.com/v1/repositories/<username>/<image_name>/tags
т.е. https://hub.docker.com/r/localstack/localstack/tags
Или вы можете получить ответ json, используя эту конечную точку:
https://registry.hub.docker.com/v1/repositories/localstack/localstack/tags
Ответ 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
...