Esta documentación describe los endpoints de la API HTTP v2 del Docker Registry que utiliza esta interfaz web.
Todos los endpoints están basados en: http://tu-registry.com:5000/v2
La API utiliza autenticación HTTP Basic. Todas las peticiones deben incluir el header:
Authorization: Basic base64(username:password) /v2/
Verifica que el registry esté disponible y funcionando.
curl -X GET http://mi-registro.com:5000/v2/ \\
-H "Authorization: Basic $(echo -n user:pass | base64)" /v2/_catalog
Obtiene la lista completa de repositorios disponibles en el registry.
curl -X GET http://mi-registro.com:5000/v2/_catalog \\
-H "Authorization: Basic $(echo -n user:pass | base64)" {
"repositories": [
"mi-app",
"nginx-custom",
"api-backend"
]
} /v2/{repository}/tags/list
Obtiene todas las etiquetas (tags) disponibles para un repositorio específico.
curl -X GET http://mi-registro.com:5000/v2/mi-app/tags/list \\
-H "Authorization: Basic $(echo -n user:pass | base64)" {
"name": "mi-app",
"tags": [
"latest",
"v1.0.0",
"v1.1.0",
"develop"
]
} /v2/{repository}/manifests/{tag}
Obtiene el digest (hash) de una imagen específica, necesario para eliminarla.
curl -I -X GET http://mi-registro.com:5000/v2/mi-app/manifests/latest \\
-H "Accept: application/vnd.docker.distribution.manifest.v2+json" \\
-H "Authorization: Basic $(echo -n user:pass | base64)" Docker-Content-Digest: sha256:abc123def456... /v2/{repository}/manifests/{digest}
Elimina una imagen usando su digest. Requiere que el registry tenga habilitado el delete.
curl -X DELETE http://mi-registro.com:5000/v2/mi-app/manifests/sha256:abc123... \\
-H "Authorization: Basic $(echo -n user:pass | base64)" Para que todas las funcionalidades trabajen correctamente, tu Docker Registry debe estar configurado con:
# config.yml
version: 0.1
log:
fields:
service: registry
storage:
cache:
blobdescriptor: inmemory
filesystem:
rootdirectory: /var/lib/registry
delete:
enabled: true # ⚠️ REQUERIDO para eliminar imágenes
http:
addr: :5000
headers:
X-Content-Type-Options: [nosniff]
# CORS para la UI web
Access-Control-Allow-Origin: ['*']
Access-Control-Allow-Methods: ['HEAD','GET','OPTIONS','DELETE']
Access-Control-Allow-Headers: ['Authorization','Accept','Cache-Control']
health:
storagedriver:
enabled: true
interval: 10s
threshold: 3 Comandos útiles basados en tu documentación original:
# 1. Etiquetar la imagen local
docker tag mi-imagen:latest mi-registro.com:5000/mi-imagen:latest
# 2. Hacer login (si es necesario)
docker login mi-registro.com:5000
# 3. Subir la imagen
docker push mi-registro.com:5000/mi-imagen:latest # Ejecutar garbage collection en el contenedor
docker exec -it registry-container bin/registry garbage-collect /etc/docker/registry/config.yml
# Ver logs del registry
docker logs registry-container # Ver estructura en el host
ls /var/lib/registry/docker/registry/v2/repositories
# Inspeccionar contenido específico
find /var/lib/registry -name "*.json" | head -5 | Código | Estado | Descripción |
|---|---|---|
| 200 | OK | Petición exitosa |
| 202 | Accepted | Eliminación aceptada |
| 401 | Unauthorized | Credenciales inválidas |
| 404 | Not Found | Repositorio o tag no encontrado |
| 405 | Method Not Allowed | DELETE no habilitado en el registry |