Este laboratorio reproduce en una terminal real la guía para arreglar pull access denied for minio/minio en Docker: el error aparece porque la imagen minio/minio ya no existe en Docker Hub, y se arregla cambiando de imagen, no con docker login. Lo grabamos el 21 de octubre de 2026 en un Debian 13 con Docker dentro, sobre arm64.
Qué demuestra la captura
Cada afirmación del vídeo sale de una salida real. docker pull minio/minio termina con código 1, la API de Docker Hub responde 404 a minio/minio y a minio/mc, y quay.io/minio/minio rechaza la descarga anónima. Después levantamos cgr.dev/chainguard/minio:latest con Docker Compose, reproducimos el fallo de permisos, lo arreglamos con chown -R 65532:65532 y comprobamos el resultado con /minio/health/live y con el cliente mc.
El texto exacto del error cambia con la versión de Docker. Nuestro demonio, el docker.io de Debian, añade denied: requested access to the resource is denied al final, y Quay responde unauthorized en lugar del 401 UNAUTHORIZED que muestra la guía. La causa es la misma: lo explica la referencia de docker pull, que trata igual un repositorio privado y uno inexistente.
Por qué la imagen de Chainguard necesita un chown
La imagen oficial de MinIO corría como root y la de Chainguard para MinIO corre como el usuario 65532. Un bind mount como ./data conserva el propietario del host, así que MinIO se para con file access denied y FATAL Unable to initialize backend. Si quieres repasar cómo funcionan los montajes, el laboratorio de volúmenes y bind mounts en Docker lo enseña paso a paso.
Dificultades con las que me he topado
Estas son las cuatro que aparecieron al grabar el laboratorio:
- El directorio de datos: Docker crea
./datacomo root si no existe, y el usuario 65532 no puede escribir en él. Elchowndesde un contenedorbusyboxlo arregla sinsudo - La configuración de mc: el cliente
cgr.dev/chainguard/minio-clienttambién corre como 65532. ConMC_CONFIG_DIRmontado en una carpeta de root,mc alias setfalla conpermission denied; lo arreglamos conchown 65532:65532 /lab/mc - Solo existe la etiqueta latest: Chainguard no publica etiquetas por versión en su plan gratuito. Fija la imagen por resumen
sha256si necesitas builds reproducibles - No hay curl ni wget en la imagen: un
healthcheckque los llame falla. La guía de healthchecks en Docker Compose explica cómo plantearlo, y aquí comprobamos la sonda desde fuera concurl
Otras salidas que no grabamos
La guía original prueba dos sustitutos más: el fork pgsty/silo, con etiquetas por versión y que corre como root, y una imagen propia compilada desde el repositorio archivado de MinIO con un Dockerfile de 22 líneas. No compilamos MinIO en el laboratorio porque tarda varios minutos y no añade nada que se vea en una terminal; el Dockerfile y su salida están en la guía.
Cambiar de imagen devuelve MinIO a la vida, pero el código de upstream está archivado. Si lo montaste con la guía para instalar MinIO con Docker, valora la migración de MinIO a Garage, la opción ligera, o la migración a RustFS, la más parecida a MinIO. Para un registro de imágenes que no dependa de Docker Hub, tienes el laboratorio del registro Docker privado y autoalojado.
Preguntas frecuentes
¿Se arregla el error pull access denied de MinIO con docker login?
No. La API de Docker Hub responde 404 a minio/minio y a minio/mc: los repositorios se borraron. Docker sugiere docker login porque usa el mismo mensaje para un repositorio privado y para uno inexistente. La salida es cambiar la línea image: del compose.
¿Por qué MinIO se para con file access denied al usar la imagen de Chainguard?
Porque esa imagen corre como el usuario 65532 y tu directorio de datos pertenece a root, como lo dejaba la imagen oficial. Para el servicio, ejecuta chown -R 65532:65532 sobre los datos desde un contenedor desechable y vuelve a levantarlo.
¿Qué imagen uso para el cliente mc ahora que minio/mc no existe?
cgr.dev/chainguard/minio-client:latest, cuyo punto de entrada ya es mc. Corre como 65532, así que monta MC_CONFIG_DIR en una carpeta propiedad de ese usuario o mc alias set fallará con permission denied.
¿Puedo compilar MinIO desde el código fuente en lugar de usar Chainguard?
Sí. La guía original incluye un Dockerfile de 22 líneas que compila MinIO RELEASE.2025-10-15T17-29-55Z y mc en una imagen Alpine. No lo grabamos en este laboratorio porque la compilación tarda varios minutos; los parches pasan a ser cosa tuya.