Solución de problemas de autenticación de Azure Container Registry
Azure Container Registry (ACR) es un servicio de registro privado. Para realizar operaciones como inserción o extracción (excepto la operación de extracción anónima), primero debe autenticarse en ACR.
Este artículo le ayuda a solucionar problemas de autenticación de ACR y proporciona soluciones a los errores más comunes que se producen al extraer imágenes de un registro de contenedor.
Solución inicial de problemas
Identifique la opción de autenticación que está usando. Una vez elegido, reproduzca el problema de autenticación para obtener el error.
Para empezar a solucionar problemas, compruebe el estado del registro de contenedor de Azure.
Para comprobar el estado del registro de contenedor, ejecute el siguiente comando:
az acr check-health --name <acr-name> --ignore-errors --yes
Si se detecta un problema, la salida del comando proporciona un código de error y una descripción. Para obtener más información sobre el código de error y las posibles soluciones, consulte la referencia de error de comprobación de estado.
Nota:
Si recibe errores relacionados con Helm o Notary, no significa que tenga un problema que afecte al registro de contenedor o al dispositivo. Solo indica que Helm o Notary no están instalados o que la CLI de Azure no es compatible con la versión instalada actualmente de Helm o Notary.
Error 1: "DOCKER_COMMAND_ERROR Compruebe si el cliente de Docker está instalado y en ejecución"
Este es un ejemplo de los detalles del error:
You may want to use 'az acr login -n <acr-name> --expose-token' to get an access token, which does not require Docker to be installed.
<date and time> An error occurred: DOCKER_COMMAND_ERROR
Please verify if Docker client is installed and running.
Solución 1: Asegúrese de que Docker está instalado
El az acr login
comando llama al docker login
comando y usa el token de acceso de Microsoft Entra para autenticarse en ACR. Requiere que el cliente de Docker y el demonio de Docker se instalen en la máquina donde se ejecuta el comando. Para instalar Docker, consulte Instalación del motor de Docker.
Solución 2: Use el comando "az acr login" con el parámetro "--expose-token".
Cuando el demonio de Docker no se ejecuta en el entorno, si necesita autenticarse con ACR, use el comando az acr login con el parámetro --expose-token. Este comando es útil cuando necesita ejecutar scripts que no requieren el demonio de Docker, sino solo la CLI de Docker (por ejemplo, al usar Azure Cloud Shell).
Error 2: "Este comando requiere ejecutar el demonio de Docker, que no se admite en Azure Cloud Shell".
Este es un ejemplo de los detalles del error:
This command requires running the docker daemon, which is not supported in Azure Cloud Shell. You may want to use 'az acr login -n <acr-name> --expose-token' to get an access token, which does not require Docker to be installed.
Solución 1: Ejecute el comando "az acr login -n <acr-name>" en otro entorno
El az acr login -n <acr-name>
comando requiere que se ejecute el cliente de Docker y el demonio de Docker. Azure Cloud Shell solo proporciona el cliente de Docker. Para resolver este error, ejecute el az acr login -n <acr-name>
comando en un entorno donde está instalado el demonio de Docker.
Solución 2: Use el comando "az acr login" con el parámetro "--expose-token".
El az acr login -n <acr-name>
comando requiere que se ejecute el cliente de Docker y el demonio de Docker. Azure Cloud Shell solo proporciona el cliente de Docker. Sin embargo, el az acr login
comando con el --expose-token
parámetro funciona para entornos sin el demonio de Docker, como Azure Cloud Shell.
Error 3: "No autorizado: autenticación requerida"
Este es un ejemplo de los detalles del error:
Error response from daemon: Get "https://<acr-name>.azurecr.io/v2/": unauthorized: {"errors":[{"code":"UNAUTHORIZED","message":"authentication required, visit https://aka.ms/acr/authorization for more information."}]}
El error indica que se produjo un error de autenticación al acceder al ACR. Este error puede producirse al ejecutar el az acr login
comando o docker login
con un nombre de usuario o una contraseña incorrectos o credenciales expiradas (cuando se usa una entidad de servicio, un token con un mapa de ámbito o un usuario administrador).
Solución: usar el nombre de usuario y la contraseña correctos o válidos
Si usa un usuario administrador para autenticarse, compruebe la credencial en la hoja Claves de acceso y si son las que usó en el
docker login
comando oaz acr login
.Nota:
Contraseña que se usó antes de que se haya regenerado.
Si usa un token asociado a una asignación de ámbito, compruebe las credenciales usadas. Una vez que genere una contraseña para el token, debe recuperarla y almacenar las credenciales de forma segura porque la contraseña ya no se mostrará después de cerrar la pantalla. Vea el mensaje en la captura de pantalla siguiente:
Si no está seguro de la contraseña que usó, considere la posibilidad de volver a generarla .
Si usa un token asociado a un mapa de ámbito, se puede establecer una fecha de expiración para la contraseña. Para ver la fecha de expiración, puede ejecutar los comandos de la CLI de Azure descritos en Mostrar detalles del token o abrir el token en Azure Portal y comprobar la fecha de expiración según la captura de pantalla siguiente:
Si usa una entidad de servicio, asegúrese de que tiene los permisos específicos para autenticarse con ACR. Para buscar los permisos específicos y los roles integrados disponibles, consulte Roles y permisos de Azure Container Registry.
Si usa una entidad de servicio, compruebe la credencial usada. Una vez que genere un secreto, tendrá que recuperarlo y almacenar las credenciales de forma segura porque la contraseña ya no se mostrará después de cerrar la pantalla. Vea el mensaje en la captura de pantalla siguiente:
Si no está seguro del valor de secreto que usó, considere la posibilidad de crear un nuevo secreto.
Si usa una entidad de servicio, asegúrese de que el secreto no ha expirado.
Para comprobar la validez del secreto, ejecute el comando az ad app credential list :
az ad app credential list --id "$SP_ID" --query "[].endDateTime" -o tsv
O bien, puede comprobar la validez del secreto comprobando la columna Expira en Azure Portal:
Si el secreto ha expirado, puede considerar la posibilidad de crear un nuevo secreto.
Error 4: "No se pueden obtener las credenciales del usuario administrador"
Este es un ejemplo de los detalles del error:
Unable to get AAD authorization tokens with message: <date> <time> An error occurred: CONNECTIVITY_REFRESH_TOKEN_ERROR
Access to registry '<acr-name>.azurecr.io' was denied. Response code: 401. Please try running 'az login' again to refresh permissions.
Unable to get admin user credentials with message: The resource with name '<acr-name>' and type 'Microsoft.ContainerRegistry/registries' could not be found in subscription '<subscription-name> (<subscription-id>)'.
Solución: asegúrese de que la identidad usada tiene los permisos específicos.
Asegúrese de que la identidad (como un usuario o una identidad administrada) usada para autenticarse tiene los permisos específicos. Para buscar los permisos específicos y los roles integrados disponibles, consulte Roles y permisos de Azure Container Registry.
Error 5: "El cliente con dirección> IP <no está permitido el acceso"
Este es un ejemplo de los detalles del error:
Unable to get AAD authorization tokens with message: <date> <time> An error occurred: CONNECTIVITY_REFRESH_TOKEN_ERROR
Access to registry '<acr-name>.azurecr.io' was denied. Response code: 403. Please try running 'az login' again to refresh permissions.
Error response from daemon: Get "https://<acr-name>.azurecr.io/v2/": denied: {"errors":[{"code":"DENIED","message":"client with IP \u0027<ip-address>\u0027 is not allowed access. Refer https://aka.ms/acr/firewall to grant access."}]}
Solución: asegúrese de que el dispositivo que intenta autenticar tiene conectividad con ACR.
ACR tiene un firewall integrado, que es un mecanismo para restringir el acceso público. Puede permitir el acceso total, permitir el acceso solo a redes específicas o deshabilitar completamente el acceso público. Sin embargo, se requiere una conectividad adecuada para la autenticación correcta. Asegúrese de que la dirección IP está permitida para acceder e iniciar sesión en el registro. Para obtener más información sobre cómo configurar el acceso público, consulte Configuración de reglas de red IP pública.
Como alternativa, puede considerar la posibilidad de usar Azure Private Link para conectarse de forma privada al registro de contenedor de Azure.
Ponte en contacto con nosotros para obtener ayuda
Si tiene preguntas o necesita ayuda, cree una solicitud de soporte o busque consejo en la comunidad de Azure. También puede enviar comentarios sobre el producto con los comentarios de la comunidad de Azure.