Exportar repositorios de la organización a CSV
Esta guía te muestra cómo exportar una lista completa de repositorios de tu organización de Docker Hub, incluyendo los repositorios privados. Utilizarás un Token de Acceso Personal (PAT) de una cuenta de administrador para autenticarte con la API de Docker Hub y exportar los detalles del repositorio a un archivo CSV para informes o análisis.
Los datos exportados incluyen el nombre del repositorio, el estado de visibilidad, la fecha de la última actualización, el recuento de descargas (pulls) y el recuento de estrellas.
Requisitos previos
Antes de comenzar, asegúrate de tener:
- Acceso de administrador a una organización de Docker Hub
curlinstalado para realizar solicitudes de APIjqinstalado para el análisis de JSON- Una aplicación de hoja de cálculo para ver el archivo CSV
Crear un token de acceso personal
Crea un token de acceso personal desde una cuenta de usuario que tenga acceso a los repositorios de la organización. Al crear el token, selecciona como mínimo permisos de acceso de Read-only (solo lectura) para listar repositorios.
ImportantUtiliza un PAT de una cuenta de usuario que sea miembro de la organización. Los usuarios con roles de propietario (owner) pueden exportar todos los repositorios de la organización. Los miembros solo pueden exportar repositorios a los que tengan permiso de acceso.
Autenticarse con la API de Docker Hub
Intercambia tu token de acceso personal por un token de portador JWT que utilizarás para las solicitudes de API posteriores.
Configura tu nombre de usuario de Docker Hub, el nombre de la organización y el token de acceso personal como variables:
USERNAME="<tu-usuario-docker>" ORG="<nombre-org>" PAT="<tu-token-de-acceso-personal>"Llama al punto de conexión de autenticación para obtener un JWT:
TOKEN=$( curl -s https://hub.docker.com/v2/auth/token \ -H 'Content-Type: application/json' \ -d "{\"identifier\":\"$USERNAME\",\"secret\":\"$PAT\"}" \ | jq -r '.access_token' )Verifica que el token se haya recuperado correctamente:
$ echo "Got JWT: ${#TOKEN} chars"
Utilizarás este JWT como un token de portador (Bearer token) en la cabecera Authorization para todas las llamadas API posteriores.
Recuperar todos los repositorios
La API de Docker Hub pagina las listas de repositorios. Este script recupera todas las páginas y combina los resultados.
Establece el tamaño de página y el punto de conexión inicial de la API:
PAGE_SIZE=100 URL="https://hub.docker.com/v2/namespaces/$ORG/repositories?page_size=$PAGE_SIZE"Pagina a través de todos los resultados:
ALL=$( while [ -n "$URL" ] && [ "$URL" != "null" ]; do RESP=$(curl -s "$URL" -H "Authorization: Bearer $TOKEN") echo "$RESP" | jq -c '.results[]' URL=$(echo "$RESP" | jq -r '.next') done | jq -s '.' )Verifica la cantidad de repositorios recuperados:
$ echo "$ALL" | jq 'length'
El script continúa solicitando la URL next de cada respuesta hasta que se completa la paginación.
Exportar a CSV
Genera un archivo CSV con los detalles del repositorio que puedas abrir en aplicaciones de hojas de cálculo.
Ejecuta el siguiente comando para crear repos.csv:
echo "$ALL" | jq -r '
(["namespace","name","is_private","last_updated","pull_count","star_count"] | @csv),
(.[] | [
.namespace, .name, .is_private, .last_updated, (.pull_count//0), (.star_count//0)
] | @csv)
' > repos.csvVerifica que la exportación se haya completado:
$ echo "Rows:" $(wc -l < repos.csv)
Abre el archivo repos.csv en tu aplicación de hoja de cálculo preferida para ver y analizar los datos de tus repositorios.
Solución de problemas
Solo aparecen repositorios públicos
Es posible que la cuenta de Docker Hub asociada con tu token de acceso personal no tenga acceso a los repositorios privados de la organización.
Para solucionar esto:
- Verifica que la cuenta sea miembro de la organización
- Comprueba que la cuenta tenga los permisos adecuados (rol de propietario o miembro)
- Asegúrate de que el token de acceso personal tenga suficientes permisos de acceso
- Vuelve a generar el JWT y reintenta la exportación
La API devuelve 403 o faltan campos
Asegúrate de estar utilizando el JWT del punto de conexión /v2/auth/token como un token de portador (Bearer token) en la cabecera Authorization, no el token de acceso personal directamente.
Verifica tu autenticación:
$ curl -s "https://hub.docker.com/v2/namespaces/$ORG/repositories?page_size=1" \
-H "Authorization: Bearer $TOKEN" | jq
Si esto devuelve un error, vuelve a ejecutar el paso de autenticación para obtener un JWT nuevo.