Как получить список изображений на Docker registry v2


Я использую docker registry v1 и мне интересно перейти на более новую версию, v2. Но мне нужен какой-то способ получить список изображений, присутствующих в реестре; например, с registry v1 я могу выполнить запрос GET to http://myregistry:5000/v1/search? в результате:

{
  "num_results": 2,
  "query": "",
  "results": [
    {
      "description": "",
      "name": "deis/router"
    },
    {
      "description": "",
      "name": "deis/database"
    }
  ]
}

но я не могу найти на официальная документация что-то подобное, чтобы получить список изображений в реестре. Кто-нибудь знает способ, чтобы сделать это на новой версии v2?

13 121

13 ответов:

для последней (по состоянию на 2015-07-31) версии Реестра V2, вы можете получить этот образ из DockerHub:

docker pull distribution/registry:master

Список всех репозиториев (эффективно изображений):

curl -X GET https://myregistry:5000/v2/_catalog
> {"repositories":["redis","ubuntu"]}

Список всех тегов для репозитория:

curl -X GET https://myregistry:5000/v2/ubuntu/tags/list
> {"name":"ubuntu","tags":["14.04"]}

можно найти

http://<ip/hostname>:<port>/v2 / _catalog

вам каталоги

по умолчанию, registry api возвращает 100 записей каталога, есть код:

когда вы curl API реестра:

curl --cacert domain.crt https://your.registry:5000/v2/_catalog

его аналоги с:

curl --cacert domain.crt https://your.registry:5000/v2/_catalog?n=100

это метод разбиения на страницы.

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

первый: дайте больше номер

curl --cacert domain.crt https://your.registry:5000/v2/_catalog?n=2000

Sencond: разобрать следующие компоновщик URL-адресом

curl --cacert domain.crt https://your.registry:5000/v2/_catalog

элемент ссылки, содержащийся в заголовке ответа:

curl --cacert domain.crt https://your.registry:5000/v2/_catalog

заголовок ответа:

Link: </v2/_catalog?last=pro-octopus-ws&n=100>; rel="next"

элемент link имеет последнюю запись этого запроса, затем вы можете запросить следующую "страницу":

curl --cacert domain.crt https://your.registry:5000/v2/_catalog?last=pro-octopus-ws

Если заголовок ответа содержит ссылке элемент, вы можете сделать это цикл.

Получить Изображения

когда вы получаете результат Каталога, он выглядит следующим образом:

{ "repositories": [ "busybox", "ceph/mds" ] }

вы можете получить изображения в каждом каталоге:

curl --cacert domain.crt https://your.registry:5000/v2/busybox/tags/list

возвращает:

{"name":"busybox","tags":["latest"]}

последняя версия реестра Docker доступна из https://github.com/docker/distribution поддерживает API каталога. (v2 / _catalog). Это позволяет осуществлять поиск в репозиториях

Если интересно, вы можете попробовать docker image registry CLI, который я построил, чтобы упростить использование функции поиска в новом дистрибутиве реестра Docker (https://github.com/vivekjuneja/docker_registry_cli)

это сводило меня с ума, но я, наконец, собрал все части вместе. По состоянию на 25.01.2015 я подтвердил, что можно перечислить изображения в реестре docker V2 ( точно так же, как упоминалось выше @jonatan. )

Я бы проголосовал за этот ответ, если бы у меня была репутация для него.

вместо этого я расширю ответ. Поскольку registry V2 сделан с учетом безопасности, я думаю, что уместно включить how to установите его с самоподписанным сертификатом, и запустите контейнер с этим сертификатом для того, чтобы https-вызов можно было сделать с этим сертификатом:

это скрипт, который я фактически использую для запуска реестра:

sudo docker stop registry
sudo docker rm -v registry
sudo docker run -d \
  -p 5001:5001 \
  -p 5000:5000 \
  --restart=always \
  --name registry \
  -v /data/registry:/var/lib/registry \
  -v /root/certs:/certs \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \ 
  -e REGISTRY_HTTP_DEBUG_ADDR=':5001' \
  registry:2.2.1

это может быть очевидным для некоторых, но я всегда путаюсь с ключами и сертификаты. Файл, на который нужно ссылаться, чтобы сделать вызов @jonaton упоминает выше**, является доменом.ЭЛТ, перечисленные выше. ( Так как я поставил домен.ЭЛТ в /root, Я сделал копию в каталог пользователя, где он может быть доступный. )

curl --cacert ~/domain.crt https://myregistry:5000/v2/_catalog
> {"repositories":["redis","ubuntu"]}

**команда выше была изменена: - X GET на самом деле не работал, когда я попробовал его.

Примечание: https://myregistry:5000 (как указано выше ) должен соответствовать домену, заданному для сгенерированного сертификата.

пожалуйста, смотрите @ jonathan's answer ниже, или документы API реестра здесь:https://docs.docker.com/registry/spec/api/

Если вы ищите "список", вы увидите, что поддержка была добавлена в версии e.

мы написали инструмент CLI для этой цели: docker-ls Он позволяет просматривать реестр docker и поддерживает аутентификацию с помощью токена или базовой проверки подлинности.

установить реестра:2.1.1 или более поздней версии (вы можете проверить последний, здесь) и использовать GET /v2/_catalog, чтобы получить список.

https://github.com/docker/distribution/blob/master/docs/spec/api.md#listing-repositories

Список всех изображений на примере сценария оболочки: https://gist.github.com/OndrejP/a2386d08e5308b0776c0

Если некоторые зашли так далеко.

принимать то, что другие уже сказали выше. Вот один лайнер, который помещает ответ в текстовый файл в формате json.

curl "http://mydocker.registry.domain/v2/_catalog?n=2000" | jq . - > /tmp/registry.lst

это выглядит как

{
  "repositories": [
    "somerepo/somecontiner",
    "somerepo_other/someothercontiner",
 ...
  ]
}

возможно, Вам придется изменить?n=xxxx', чтобы соответствовать, сколько контейнеров у вас есть.

Следующий способ автоматического удаления старых и неиспользуемых контейнеров.

Docker search registry V2 функциональность в настоящее время не поддерживается на момент написания этой статьи. См. обсуждение с февраля 2015 года: "предложить функциональность поиска реестра #206"https://github.com/docker/distribution/issues/206

Я написал сценарий, который вы можете найти:https://github.com/BradleyA/Search-docker-registry-v2-script.1.0 Это не очень красиво, но он получает необходимую информацию из частного реестра.

Я написал простой в использовании инструмент командной строки для перечисления изображений различными способами (например, Список всех изображений, список всех тегов этих изображений, список всех слоев этих тегов).

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

Он написан на python и не нужно загружать громоздкие большие пользовательские образы реестра.

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

это в соответствии с вышеизложенным, но с указанием имени пользователя / пароля в URL.

curl -k -X GET https://yourusername:yourpassword@theregistryURL/v2/_catalog

он возвращается как неформатированный JSON.

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

curl -k -X GET https://yourusername:yourpassword@theregistryURL/v2/_catalog | python -m json.tool

поскольку каждый реестр выполняется как контейнер, идентификатор контейнера имеет связанный с ним файл журнала ID-json.журнал этот файл журнала содержит vars.name=[изображение] и vars.ссылка=[тег]. Сценарий может быть использован для экстраполяции и печати этих данных. Это, пожалуй, один из способов перечислить изображения, помещенные в реестр V2-2.0.1.