Soluciona problemas

En esta sección, se explica cómo solucionar problemas comunes de Container Registry y Docker.

Proyectos con alcance de dominio

Si recibes el error invalid reference format, es posible que tengas un proyecto con alcance de dominio.

Si tu proyecto tiene alcance para tu dominio, entonces, el ID del proyecto incluye el dominio y dos puntos, por ejemplo: example.com:my-project. Consulta la sección Proyectos con alcance de dominio para saber cómo trabajar con los ID de proyectos que incluyen un dominio.

Error: Estado 405: "La API de Registry v1 está inhabilitada".

Si experimentas continuamente un error como "La API de Registry v1 está inhabilitada" cuando extraes o envías imágenes, asegúrate de que el nombre de host, el ID del proyecto, el nombre de la imagen y la etiqueta o resumen estén escritos de forma correcta.

Para ver las etiquetas y el resumen de tu imagen, ejecuta el siguiente comando:

gcloud container images list-tags [HOSTNAME]/[PROJECT-ID]/[IMAGE]
    

Por ejemplo:

gcloud container images list-tags gcr.io/my-project/my-image
    

Para obtener más información sobre cómo generar listas de etiquetas y resúmenes de imágenes, consulta Gestionar imágenes.

Problemas con los permisos

En las siguientes secciones, se describen soluciones para problemas específicos de permisos. Asegúrate siempre de tener los permisos necesarios para enviar o extraer imágenes. Consulta Permisos y funciones.

Si habilitaste el acceso uniforme a nivel de depósito en un depósito de almacenamiento que utiliza Container Registry, es posible que tengas problemas de acceso para enviar y extraer contenido en Container Registry.

A fin de solucionar los problemas de acceso, asegúrate de tener los permisos necesarios para enviar o extraer contenido. Estos permisos se enumeran en Permisos y funciones.

Si experimentas un error permission denied, como el siguiente ejemplo:

FATA[0000] Post http://var/run/docker.sock/v1.17/images/gcr.io/container-engine-docs/example/push?tag=: dial unix /var/run/docker.sock: permission denied
    ERROR: (gcloud.docker) A Docker command did not run successfully.
    Tried to run: 'docker push gcr.io/container-engine-docs/example'
    Exit code: 1
    

Es posible que debas agregarte al grupo de usuarios docker.

Ejecuta el siguiente comando en el shell o la ventana de la terminal:

  sudo usermod -a -G docker ${USER}
    

Reinicia el sistema después de agregarte al grupo de usuarios docker.

Problemas de permisos cuando te comunicas con Container Registry

Si detectas un error de permiso como el siguiente:

Permission denied: Unable to create the repository, please check that you have access to do so
    
  1. Verifica que la facturación esté habilitada para tu proyecto.

  2. Verifica tu acceso:

    1. Ejecuta el siguiente comando a fin de asegurarte de que estás autenticado para gcloud:

      gcloud init
          
    2. Ejecuta el siguiente comando a fin de asegurarte de que Docker esté configurado para usar gcloud como asistente de credenciales de Container Registry:

      gcloud auth configure-docker
          
    3. Verifica que se puede ejecutar docker-credential-gcloud:

      docker-credential-gcloud list

      Deberías ver un objeto JSON con su registro de destino como una de sus claves. Por ejemplo:

      {
            "https://asia.gcr.io": "oauth2accesstoken",
            "https://eu.gcr.io": "oauth2accesstoken",
            "https://gcr.io": "oauth2accesstoken",
            "https://staging-k8s.gcr.io": "oauth2accesstoken",
            "https://us.gcr.io": "oauth2accesstoken"
          }
          
    4. A continuación, comprueba si tienes permiso para escribir en Cloud Storage en el proyecto al que intentas acceder. De lo contrario, pídele a un administrador que le otorgue acceso a tu usuario y vuelve a intentarlo.

    5. Si el problema persiste después de obtener el permiso correcto, es posible que tu token de acceso se obtenga sin uno de estos permisos:

      • https://www.googleapis.com/auth/devstorage.read_write
      • https://www.googleapis.com/auth/devstorage.full_control

      Para verificarlo, primero obtén el token de acceso. Este varía de una aplicación a otra, por ejemplo, si usas un token de acceso de una cuenta de servicio predeterminada de Compute Engine, puedes seguir estas instrucciones para obtenerlo.

      Una vez que obtengas el token de acceso, puedes usar este comando a fin de ver los permisos que se usaron para obtenerlo:

      curl https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=<your access token>
          

      En caso de que no se incluyan los permisos mencionados, soluciona el problema para asegurarte de incluirlos cuando obtengas el token de acceso en tu código. Por ejemplo, en el caso de los tokens generados específicamente para la cuenta de servicio predeterminada de tu máquina virtual de Compute Engine, deberás corregir la configuración de permisos para esa máquina virtual y volver a crearla.

Problemas de permisos para enviar y extraer imágenes

La instancia de VM que envía o extrae imágenes debe configurarse correctamente con los permisos de IAM y los permisos de acceso necesarios para acceder al depósito de almacenamiento de Container Registry. Si deseas obtener información acerca de la configuración requerida, consulta los requisitos para usar Container Registry con Google Cloud.

Límites de cuota

Si alcanzaste el límite de cuota de Container Registry, es posible que veas un mensaje de error como este:

Error: Status 429 trying to pull repository [...] "Quota Exceeded."
    

Para evitar alcanzar el límite de cuota, puedes hacer lo siguiente:

  • Aumenta la cantidad de direcciones IP que se comunican con Container Registry. Las cuotas son por dirección IP.
  • Agrega reintentos que introduzcan una demora. Por ejemplo, puedes usar la retirada exponencial.

El extremo del registro no es válido con boot2docker

Si tienes problemas para acceder a Container Registry desde un entorno boot2docker:

docker push gcr.io/example/sample

    Error response from daemon: invalid registry endpoint https://gcr.io/v0/:
      unable to ping registry endpoint https://gcr.io/v0/
    v2 ping attempt failed with error: Get https://gcr.io/v2/:
      x509: certificate has expired or is not yet valid
    v1 ping attempt failed with error: Get https://gcr.io/v1/_ping:
      x509: certificate has expired or is not yet valid.
    If this private registry supports only HTTP or HTTPS with an unknown CA
    certificate, please add `--insecure-registry gcr.io` to the daemon's
    arguments. In the case of HTTPS, if you have access to the registry's CA
    certificate, no need for the flag; simply place the CA certificate at
    /etc/docker/certs.d/gcr.io/ca.crt
    

Es posible que necesites reiniciar boot2docker:

boot2docker stop
    boot2docker start
    

Docker en Mac

Si tienes problemas con Docker en Mac, es posible que debas probar una solución alternativa. Los errores pueden incluir operaciones de envío y extracción de Docker que no responden o un error de red similar al siguiente:

Post https://us.gcr.io/v2/[repo name]/blobs/uploads/: dial tcp xx.xxx.xx.xx:xxx: i/o timeout
    

Si experimentas estos errores, prueba estos pasos:

  • Ejecuta el comando docker-machine restart default en la terminal de Mac para reiniciar el daemon de Docker.

  • Asegúrate de que la opción "Almacenar de manera segura los accesos de Docker en el llavero de macOS" no esté habilitada en el menú Preferencias de Docker.

  • Asegúrate de estar ejecutando la versión más reciente de Docker.