Cómo obtener una lista de imágenes en docker registry v2


Estoy usando docker registry v1 y estoy interesado en migrar a la versión más reciente, v2. Pero necesito alguna forma de obtener una lista de imágenes presentes en el registro; por ejemplo, con registry v1 puedo ejecutar una solicitud GET a http://myregistry:5000/v1/search? y el resultado es:

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

Pero no puedo encontrar en documentación oficial algo similar para obtener una lista de imágenes en el registro. Alguien sabe una manera de hacerlo en la nueva versión v2?

Author: Efren, 2015-07-06

13 answers

Para la última versión (a partir de 2015-07-31) de Registry V2, puede obtener esta imagen de DockerHub:

docker pull distribution/registry:master

Lista todos los repositorios (efectivamente imágenes):

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

Lista todas las etiquetas para un repositorio:

curl -X GET https://myregistry:5000/v2/ubuntu/tags/list
> {"name":"ubuntu","tags":["14.04"]}
 230
Author: jonatan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-25 10:50:08

Puede buscar en

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

 47
Author: Abhishek Jaiswal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-14 07:31:27

Obtener catálogos

Por defecto, la api del registro devuelve 100 entradas del catálogo, existe el código :

Cuando se curva la api del registro:

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

Equivale a:

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

Esta es una paginación methond.

Cuando la suma de entradas más allá de 100, se puede hacer de dos maneras:

Primero : dar un número mayor

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

Sencond: analizar el siguiente vinculador url

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

Un elemento de enlace contenido en el encabezado de la respuesta:

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

Encabezado de respuesta:

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

El elemento link tiene la última entrada de esta solicitud, luego puede solicitar la siguiente'página':

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

Si el encabezado de respuesta contiene el elemento link, puede hacerlo en un bucle .

Obtener imágenes

Cuando se obtiene el resultado del catálogo, es como sigue:

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

Puedes obtener las imágenes en cada catálogo:

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

Devuelve:

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

 23
Author: litanhua,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-24 06:39:25

La última versión del Registro Docker disponible en https://github.com/docker/distribution admite la API de catálogo. (v2 / _catalog). Esto permite la capacidad de buscar repositorios

Si está interesado, puede probar docker image registry CLI que construí para facilitar el uso de las funciones de búsqueda en la nueva distribución del Registro Docker ( https://github.com/vivekjuneja/docker_registry_cli )

 21
Author: ZephyrPLUSPLUS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-28 11:27:58

Esto me ha estado volviendo loco, pero finalmente junté todas las piezas. A partir del 25/1/2015, he confirmado que es posible listar las imágenes en el registro docker V2 ( exactamente como @jonatan mencionó, arriba. )

Votaría esa respuesta, si tuviera el representante a favor.

En su lugar, voy a ampliar la respuesta. Dado que registry V2 está hecho con la seguridad en mente, creo que es apropiado incluir cómo configurarlo con un certificado autofirmado, y ejecutar el contenedor con ese cert para que se pueda hacer una llamada https a él con ese cert:

Este es el script que realmente uso para iniciar el registro:

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

Esto puede ser obvio para algunos, pero siempre me confundan con claves y certificados. El archivo que necesita ser referenciado para hacer la llamada @jonaton menciona arriba**, es el dominio.crt enumerados anteriormente. ( Desde que puse dominio.crt en /root, hice una copia en el directorio de usuario donde se podía acceder. )

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

**El comando se ha cambiado lo anterior: - X GET no funcionó cuando lo probé.

Nota: https://myregistry:5000 (como arriba ) debe coincidir con el dominio dado al cert generado.

 17
Author: Cognitiaclaeves,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-07 18:53:34

Por favor, consulte la respuesta de @jonathan a continuación , o los documentos de la API del registro aquí: https://docs.docker.com/registry/spec/api /

Si busca "listing" verá que el soporte se agregó en la versión e.

 14
Author: Andy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-16 17:04:14

Escribimos una herramienta CLI para este propósito: docker-ls Le permite navegar por un registro de docker y admite la autenticación a través de token o autenticación básica.

 12
Author: Christian Speckner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-03 08:49:14

Instalar registro:2.1.1 o posterior (puede comprobar la última, aquí) y utilizar GET /v2/_catalog para obtener la lista.

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

Lista todas las imágenes por Shell script ejemplo: https://gist.github.com/OndrejP/a2386d08e5308b0776c0

 9
Author: Ondrej Prochazka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-26 22:26:25

Si algunos llegan hasta aquí.

Tomando lo que otros ya han dicho anteriormente. Aquí hay una línea que pone la respuesta en un archivo de texto formateado, json.

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

Esto parece

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

Es posible que tenga que cambiar el `?n = xxxx ' para que coincida con la cantidad de contenedores que tiene.

Lo siguiente es una forma de eliminar automáticamente los contenedores viejos y no utilizados.

 2
Author: nelaaro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-19 08:51:19

La funcionalidad del registro de búsqueda de Docker v2 actualmente no es compatible en el momento de escribir este artículo. Ver discusión desde Feb 2015:" proponer funcionalidad de búsqueda de registro #206 " https://github.com/docker/distribution/issues/206

Escribí un script que puedes encontrar: https://github.com/BradleyA/Search-docker-registry-v2-script.1.0 No es bonito, pero obtiene la información necesaria del registro privado.

 1
Author: Bradley Allen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-12 23:21:35

Escribí una herramienta de línea de comandos fácil de usar para listar imágenes de varias maneras (como listar todas las imágenes, listar todas las etiquetas de esas imágenes, listar todas las capas de esas etiquetas).

También le permite eliminar imágenes no utilizadas de varias maneras, como eliminar solo etiquetas antiguas de una sola imagen o de todas las imágenes, etc. Esto es conveniente cuando está llenando su registro desde un servidor CI y desea mantener solo las versiones más recientes/estables.

Está escrito en python y no necesita que descargar grandes imágenes de registro personalizado voluminosos.

 1
Author: anoxis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-11 18:39:29

Tuve que hacer lo mismo aquí y lo anterior funciona, excepto que tuve que proporcionar los detalles de inicio de sesión, ya que era un repositorio docker local.

Es según lo anterior pero con el suministro del nombre de usuario/contraseña en la URL.

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

Vuelve como JSON sin formato.

Lo canalé a través del formateador python para facilitar la lectura humana, en caso de que te gustaría tenerlo en este formato.

curl -k -X GET https://yourusername:yourpassword@theregistryURL/v2/_catalog | python -m json.tool
 1
Author: chai,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-13 05:14:54

Dado que cada registro se ejecuta como un contenedor, el ID del contenedor tiene asociado un ID de archivo de registro: json.log este archivo de registro contiene el vars.name = [imagen] y vars.reference=[tag]. Se puede utilizar un script para extrapolar e imprimir estos. Este es quizás un método para listar imágenes enviadas al registro V2-2.0.1.

 0
Author: Phil Pinkerton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-05 17:51:08