ОБНОВЛЕНИЕ Спасибо за совет @ 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 (или добавить env-переменную PATH в .bashrc/ .zshrc) и поместить этот код в него. Затем добавьте исполняемые права доступа ( chmod +x dockertags).
Использование:
dockertags ubuntu ---> перечислить все теги Ubuntu
dockertags php apache ---> перечислить все теги php php, содержащие 'apache'
Вы можете обернуть все это в echo [backtick] ...[backtick], чтобы сжать его в одну строку. И / или замените «debian» на $ 1 и поместите его в скрипт под названием «dockertags» в / usr / local / bin. Затем перед закрывающей обратной галочкой вы можете добавить | grep $ 2. Затем chmod + x it, а затем вы можете перейти к «dockertags php apache», чтобы увидеть все теги php, содержащие apache.
sed -e 's/[][]//g' -e 's/"//g' -e 's/ //g'гораздо более четко написаноtr -d '[]" '
Уильям Перселл
1
Я изменил, чтобы использовать второй позиционный аргумент в качестве имени пользователя: пароль, чтобы я мог отключить wget для curl и использовать userauth="-u ${2}"разрешение ${userauth}(если оно пустое, без переключателей или параметров). Это может помочь любому, кто использует частные
Судя по информации, приведенной в подразделе «Теги» в документах , этот GET, по-видимому, требует авторизации, поэтому API-интерфейс v1 + sedкажется более простым в использовании для быстрой проверки ...
akavel
3
Если вы получаете «несанкционированную» ошибку, см. Мой альтернативный ответ . Не в обиду человеку, который разместил оригинальный ответ. Мне пришлось предпринять дополнительные шаги, чтобы получить ответ выше, чтобы работать, и хотел помочь другим.
RobV8R
23
Если вы хотите использовать API Docker Registry v2, он перечисляет теги по страницам. Чтобы получить список всех тегов изображения, вы можете добавить в URL большой параметр page_size, например:
Docker Hub, по-видимому, ограничивает размер страницы до максимального максимального значения 100.
Шейн
2
@ Шейн О, правда? Я не встречал изображения с таким количеством страниц. URL любит https://registry.hub.docker.com/v2/repositories/library/centos/tags/?page=101работать?
API Docker V2 требует токен-носитель OAuth с соответствующими утверждениями. На мой взгляд, официальная документация по этой теме довольно расплывчата. Чтобы другие не переживали ту же боль, что и я, я предлагаю следующую docker-tagsфункцию.
Правда, docker-tagsделает несколько предположений. В частности, параметры запроса OAuth в основном жестко запрограммированы. Более амбициозная реализация создаст запрос к реестру без проверки подлинности и получит параметры OAuth из ответа без проверки подлинности.
Обратите внимание, что он image_nameне должен содержать информацию о пользователе и т. Д. Например, если вы нажимаете изображение с именем, tutum.co/username/xто image_nameдолжно быть x.
Что это за сайт tutum.co, который, как вы говорите, должен дать им мой логин и пароль от dockerhub?
Накилон
1
@Nakilon Когда я написал этот ответ, несколько лет назад Tutum был сервисом, предоставляющим личный реестр Docker. И я не «даю им» свой пароль, я аутентифицируюсь с их службой, используя стандартную базовую HTTP-аутентификацию через https.
Йохан
Тутум больше не существует. Можете ли вы обновить свой ответ, чтобы люди случайно не отправляли свои учетные данные тому, кто сейчас владеет этим доменом?
Используйте кавычки, чтобы избежать проблем с jq:'.[].name'
Soullivaneuh
1
@Soullivaneuh, какие проблемы могут возникнуть без кавычек? Спасибо!
sigjuice
С Zsh, у меня есть следующее сообщение об ошибке: no matches found: .[].name. Но это хорошо работает на Bash, может быть, это ваша оболочка по умолчанию?
Soullivaneuh
@ Soullivaneuh спасибо! Я добавил цитаты в jqкоманду
Получить все теги из Docker Hub: эта команда использует JSONпроцессор командной строки jqдля выбора имен тегов из JSONвозвращенных Реестром Docker Hub (кавычки удаляются с помощью tr). Замените библиотеку именем пользователя Docker Hub, debian - именем образа:
используя версию 1:curl -L -s 'https://registry.hub.docker.com/v1/repositories/danilobatistaqueiroz/job-wq-1/tags'
Данило
1
Я сделал это, когда мне нужно было выполнить задачу, в которой, если пользователь каким-то образом введет неправильный тег, мы должны предоставить список всех тегов, присутствующих в репо (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>
Таким образом, в этом мы можем дать аргументы для нашего командного файла, например:
Я не думаю, что это работает для изображений реестра. Я просто получаю «Идентификатор <id> не соответствует ни одному сервису, узлу или кластеру узлов».
Йохан
1
В powershell 5.1 у меня есть простой скрипт list_docker_image_tags.ps1, подобный этому:
Если люди хотят читать теги из реестра RedHat, https://registry.redhat.io/v2выполните следующие действия:
# example nodejs-12 image
IMAGE_STREAM=nodejs-12
REDHAT_REGISTRY_API="https://registry.redhat.io/v2/rhel8/$IMAGE_STREAM"# Get an oAuth token based on a service account username and password https://access.redhat.com/articles/3560571
TOKEN=$(curl --silent -u "$REGISTRY_USER":"$REGISTRY_PASSWORD""https://sso.redhat.com/auth/realms/rhcc/protocol/redhat-docker-v2/auth?service=docker-registry&client_id=curl&scope=repository:rhel:pull"| jq --raw-output '.token')# Grab the tags
wget -q --header="Accept: application/json"--header="Authorization: Bearer $TOKEN"-O -"$REDHAT_REGISTRY_API/tags/list"| jq -r '."tags"[]'
Если вы хотите сравнить то, что у вас есть в вашем локальном реестре openshift, с тем, что находится в восходящем реестре registry.redhat.com, то вот полный сценарий .
docker(1)
github.com/docker/for-linux/issues/455Ответы:
Я получил ответ отсюда . Большое спасибо! :)
Просто однострочный скрипт: (найдите все теги Debian)
ОБНОВЛЕНИЕ Спасибо за совет @ degelf. Вот сценарий оболочки.
Вы можете просто создать новое имя файла
dockertags
в / usr / local / bin (или добавить env-переменную PATH в.bashrc
/.zshrc
) и поместить этот код в него. Затем добавьте исполняемые права доступа (chmod +x dockertags
).Использование:
dockertags ubuntu
---> перечислить все теги Ubuntudockertags php apache
---> перечислить все теги php php, содержащие 'apache'источник
...
[backtick], чтобы сжать его в одну строку. И / или замените «debian» на $ 1 и поместите его в скрипт под названием «dockertags» в / usr / local / bin. Затем перед закрывающей обратной галочкой вы можете добавить | grep $ 2. Затем chmod + x it, а затем вы можете перейти к «dockertags php apache», чтобы увидеть все теги php, содержащие apache.wget -q https://registry.hub.docker.com/v1/repositories/circleci/ruby/tags -O - | jq -r '.[].name'
если выjq
установилиsed -e 's/[][]//g' -e 's/"//g' -e 's/ //g'
гораздо более четко написаноtr -d '[]" '
userauth="-u ${2}"
разрешение${userauth}
(если оно пустое, без переключателей или параметров). Это может помочь любому, кто использует частныеНачиная с Docker Registry V2,
GET
достаточно:Смотрите документы для более.
источник
sed
кажется более простым в использовании для быстрой проверки ...Если вы хотите использовать API Docker Registry v2, он перечисляет теги по страницам. Чтобы получить список всех тегов изображения, вы можете добавить в URL большой параметр page_size, например:
источник
https://registry.hub.docker.com/v2/repositories/library/centos/tags/?page=101
работать?java
изображение является хорошим примером. Да, вы можете делать такие вещи, как registry.hub.docker.com/v2/repositories/library/java/tags/… . См.next
Иprevious
ссылки в результате для примеров.API Docker V2 требует токен-носитель OAuth с соответствующими утверждениями. На мой взгляд, официальная документация по этой теме довольно расплывчата. Чтобы другие не переживали ту же боль, что и я, я предлагаю следующую
docker-tags
функцию.Самую последнюю версию
docker-tags
можно найти в моем GitHubGist: «Список тегов изображения Docker с использованием bash» .Функция docker-tags зависит от jq . Если вы играете с JSON, скорее всего, у вас уже есть.
пример
Правда,
docker-tags
делает несколько предположений. В частности, параметры запроса OAuth в основном жестко запрограммированы. Более амбициозная реализация создаст запрос к реестру без проверки подлинности и получит параметры OAuth из ответа без проверки подлинности.источник
arr=("$@")
. Просто напишитеdocker-tags() { for item; do ....
Мне удалось заставить его работать с помощью curl:
Обратите внимание, что он
image_name
не должен содержать информацию о пользователе и т. Д. Например, если вы нажимаете изображение с именем,tutum.co/username/x
тоimage_name
должно бытьx
.источник
Опираясь на ответ Яна Фото ( API v2 ), я создал простой скрипт на Python для вывода списка тегов для данного изображения. .
Использование:
Вывод:
источник
Если
jq
доступен инструмент разбора JSON,источник
'.[].name'
no matches found: .[].name
. Но это хорошо работает на Bash, может быть, это ваша оболочка по умолчанию?jq
командуСм. Утилиту 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
источник
Чтобы просмотреть все доступные теги в браузере:
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
источник
Вы также можете использовать этот лом:
& Добавить следующее (как есть):
Сделайте его исполняемым:
Тогда, наконец, попробуйте:
[Надеюсь, вы знаете о $ & # перед запуском любой команды]
источник
Вы можете использовать его, если в вашем env нет jq, =)
источник
Получить все теги из Docker Hub: эта команда использует
JSON
процессор командной строкиjq
для выбора имен тегов изJSON
возвращенных Реестром Docker Hub (кавычки удаляются с помощьюtr
). Замените библиотеку именем пользователя Docker Hub, debian - именем образа:источник
Вот скрипт Powershell, который я написал для Windows. Обрабатывает репо v1 и v2:
Get-DockerImageVersions.ps1:
источник
Вы можете достичь, запустив на терминале это:
Кроме того, если у вас нет JQ, вы должны установить его по
источник
curl -L -s 'https://registry.hub.docker.com/v2/repositories/library/mysql/tags/' | jq .results[].name
спасет вас команда grepcurl -L -s 'https://registry.hub.docker.com/v1/repositories/danilobatistaqueiroz/job-wq-1/tags'
Я сделал это, когда мне нужно было выполнить задачу, в которой, если пользователь каким-то образом введет неправильный тег, мы должны предоставить список всех тегов, присутствующих в репо (Docker repo), присутствующих в реестре. Так что у меня есть код в пакетном скрипте.
Таким образом, в этом мы можем дать аргументы для нашего командного файла, например:
источник
У API реестра Docker есть конечная точка для перечисления всех тегов .
Похоже, у Tutum есть аналогичная конечная точка , а также способ доступа через tutum-cli .
С tutum-cli попробуйте следующее:
источник
В powershell 5.1 у меня есть простой скрипт list_docker_image_tags.ps1, подобный этому:
Тогда я могу grep для 4.7 тегов, как это:
источник
Вы можете перечислить все теги с skopeo .
Для внешних реестров:
источник
Если люди хотят читать теги из реестра RedHat,
https://registry.redhat.io/v2
выполните следующие действия:Если вы хотите сравнить то, что у вас есть в вашем локальном реестре openshift, с тем, что находится в восходящем реестре registry.redhat.com, то вот полный сценарий .
источник