¿Cómo buscar imágenes del registro privado 1.0 en Docker? [cerrado]


76

Hice un registro privado, curl xx.xx.xx.xx: 5000 está bien. Empujo una imagen en el registro privado de Docker haciendo: docker push xx.xx.xx.xx:5000/centos
devuelve:
http://xx.xx.xx.xx:5000/v1/repositories/centos/tags/latest

la pregunta es cómo obtener todas las imágenes de la web de registro o hacer lo que sea. No puedo encontrar ninguna información de la api del registro de Docker. alguien ayuda? :)


Me refiero a cómo buscar imágenes del registro privado por línea de comando o http
edwardsbean

Respuestas:


71

A partir de la versión 0.7.0 del registro privado , puede hacer:

$ curl -X GET http://localhost:5000/v1/search?q=postgresql

y obtendrás una carga útil json:

{"num_results": 1, "query": "postgresql", "results": [{"description": "", "name": "library/postgresql"}]}

para dar más antecedentes, aquí es cómo comencé mi registro:

docker run \
        -e SETTINGS_FLAVOR=local \
        -e STORAGE_PATH=/registry \
        -e SEARCH_BACKEND=sqlalchemy \
        -e LOGLEVEL=DEBUG \
        -p 5000:5000 \
        registry

por lo que esta es una característica indocumentada parasearch
Larry Cai

5
ver la referencia de este problema github.com/docker/docker-registry/issues/63 curl -X GET http://localhost:5000/v1/search puede enumerar todas las imágenes
Larry Cai

12
A partir de api v2 se hace con http://localhost:5000/v2/_catalog docs.docker.com/registry/spec/api
mimo

89

Ahora, desde el cliente de Docker, simplemente puede buscar en su registro privado directamente sin usar las API HTTP ni ninguna herramienta adicional:

por ejemplo, buscando una imagen centos:

docker search localhost:5000/centos


Para el registro, esto funcionó para mí usando Docker versión 1.3.1, compilación 4e9bbfa
Marcello Romani

4
¡Esto definitivamente debería mencionarse en la página de ayuda de cli! docs.docker.com/reference/commandline/cli/#search
Marcello Romani

1
@MarcelloRomani Creo que este es el enlace correcto: docs.docker.com/engine/reference/commandline/search
Hexaholic

73

Entonces sé que este es un campo que cambia rápidamente, pero (a partir de 2015-09-08) encontré lo siguiente en Docker Registry HTTP API V2 :

Listado de repositorios ( enlace )

GET /v2/_catalog

Listado de etiquetas de imagen ( enlace )

GET /v2/<name>/tags/list

En base a eso, lo siguiente funcionó para mí en un registro local (registro: 2 ID de IMAGEN 1e847b14150e365a95d76a9cc6b71cd67ca89905e3a0400fa44381ecf00890e1 creado el 2015-08-25T07: 55: 17.072):

$ curl -X GET http://localhost:5000/v2/_catalog
{"repositories":["ubuntu"]}
$ curl -X GET http://localhost:5000/v2/ubuntu/tags/list
{"name":"ubuntu","tags":["latest"]}

17

Actualmente no hay soporte de búsqueda para Docker Registry v2 .

Hubo un hilo de larga duración sobre el tema . El plan actual es admitir la búsqueda con una extensión al final, que debería estar lista para la v2.1 .

Como solución alternativa , ejecute lo siguiente en la máquina donde se ejecuta su registro v2:

> docker exec -it <your_registry_container_id> bash
> ls /var/lib/registry/docker/registry/v2/repositories/

Las imágenes están en subdirectorios correspondientes a su espacio de nombres, p. Ej. jwilder/nginx-proxy


si el comando docker exec -it <your_registry_container_id> bash no funciona, intente docker exec -it <your_registry_container_id> / bin / sh
KurioZ7

13

Pude recuperar todo en mi registro privado buscando solo 'biblioteca':

docker search [my.registry.host]:[port]/library

Devoluciones (por ejemplo):

NAME                    DESCRIPTION   STARS     OFFICIAL   AUTOMATED
library/custom-image                  0                    
library/another-image                 0                    
library/hello-world                   0

33
Con Docker 1.8.1 en Ubuntu 14.04 estoy obteniendo Error response from daemon: Unexpected status code 404, ¿qué pasa?
carloreggiani

4
Tengo el mismo problema, el comando 'docker search repositroy_ip: 5000 / busybox' devuelve el 404, pero el comando anterior 'docker push repository_ip: 5000 / busybox' ha tenido éxito
ksopyla

es posible que deba usar curl para registros inseguros, por ejemplocurl --insecure -u "test:password" https://myregistrydomain.com:5000/v2/_catalog
Leon Mak

"Si inicia su registro de la ventana acoplable sin habilitar la búsqueda, entonces esta interfaz de usuario no funcionará y no es obvio por qué. Pude agregar el registro sin problemas porque docker-registro-host: 5000 / v1 / ping devuelve HTTP 200, pero al navegar a las imágenes, la interfaz de usuario informará que el "Registro es inaccesible" b / c docker-registry-host: 5000 / v1 / search devuelve HTTP 404. " github.com/atcol/docker-registry-ui/issues/…
sm4rk0

7

Lista de todas las imágenes

docker search <registry_host>:<registry_port>/

Lista de imágenes como 'vcs'

docker search <registry_host>:<registry_port>/vcs

5

Instalé el proyecto atc- / docker-registry-web que me proporciona la interfaz de usuario y busco mi registro privado. https://github.com/atc-/docker-registry-web

Está acoplado y puedes ejecutarlo

docker run -p 8080: 8080 -e REG1 = http: //registry_host.name: 5000 / v1 / atcol / docker-registry-ui

y revisar contenidos navegando a registry_ui_host.name:8080


2

Actualmente AFAIK, no hay una manera fácil de hacer esto, ya que esta información debe almacenarse en un índice que el registro privado no tiene. Pero dependiendo de cómo comenzó el registro, tiene 2 opciones:

  1. si inició el registro sin -v para almacenar datos en una carpeta de host separada, puede probar con docker diff <id_of_registry_container> con esto, debería obtener información sobre los cambios en el contenedor fs. Todas las imágenes enviadas deben estar en algún lugar de / tmp / registry / repositories /
  2. si comenzó el registro con -v, simplemente verifique el contenido del directorio montado en el host

Si usó "centos" como nombre, debería estar en / tmp / registry / repositories / library / centos. Esta carpeta contendrá archivos de texto que describen la estructura de la imagen. Los datos reales están en / tmp / registry / images /.


lo siento, me refiero a cómo buscar imágenes del registro privado por línea de comando o http
edwardsbean

Sí, lo sé, pero AFAIK sin índice no puede buscar imágenes en el registro privado. Hay un /v1/searchmétodo api en el registro, pero requiere un backend de índice. Existe una implementación de índice básica en el código de registro privado ( github.com/dotcloud/docker-registry/blob/master/docker_registry/… ) pero es solo para proporcionar funciones básicas en modo independiente. Hace unos días encontré esto: github.com/ekristen/docker-index pero no tuve tiempo de probarlo.
2014

1

Modificando la respuesta de @mre para obtener la lista solo desde un comando (válido al menos para Docker Registry v2).

docker exec -it <your_registry_container_id> ls -a /var/lib/registry/docker/registry/v2/repositories/

También para enumerar las etiquetas de un repositorio: docker exec -it <your_registry_container_id> ls -a / var / lib / registry / docker / registry / v2 / repositories / postgresql / _manifests / tags
Mohsen Abasi

0

Otro método en una línea (sustituya su ruta / puertos reales si es necesario).

Ejemplo: suponga un registro genérico: inicio 2.0, el contenedor de registro en ejecución tiene un archivo de registro que contiene imágenes y nombres de etiquetas. Extrapolo los datos así:

grep -r -o "vars\.name=.* vars.reference=.*" /var/lib/docker/containers/* | cut -c 167-225 | sed 's/ver.*$//' | sed 's/vars\.name=//' | sed 's/ vars\.reference=/:/' | sort -u

Es posible que deba modificar los valores de corte para obtener la salida deseada.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.