Problemen met Azure Container Registry-verificatie oplossen
Azure Container Registry (ACR) is een privéregisterservice. Als u bewerkingen zoals push of pull wilt uitvoeren (met uitzondering van de anonieme pull-bewerking ), moet u zich eerst verifiëren bij de ACR.
Dit artikel helpt u bij het oplossen van problemen met ACR-verificatie en biedt oplossingen voor de meest voorkomende fouten die optreden wanneer u installatiekopieën ophaalt uit een containerregister.
Eerste probleemoplossing
Identificeer de verificatieoptie die u gebruikt. Zodra u er een hebt gekozen, reproduceert u het verificatieprobleem om de fout op te halen.
Begin met het oplossen van problemen door de status van uw Azure-containerregister te controleren.
Voer de volgende opdracht uit om de status van het containerregister te controleren:
az acr check-health --name <acr-name> --ignore-errors --yes
Als er een probleem wordt gedetecteerd, bevat de opdrachtuitvoer een foutcode en beschrijving. Zie de naslaginformatie over statuscontrolefouten voor meer informatie over de foutcode en mogelijke oplossingen.
Notitie
Als u fouten krijgt met betrekking tot Helm of Notary, betekent dit niet dat u een probleem ondervindt dat van invloed is op uw containerregister of apparaat. Het geeft alleen aan dat Helm of Notary niet is geïnstalleerd of dat de Azure CLI niet compatibel is met de momenteel geïnstalleerde versie van Helm of Notary.
Fout 1: 'DOCKER_COMMAND_ERROR Controleer of de Docker-client is geïnstalleerd en wordt uitgevoerd'
Hier volgt een voorbeeld van de foutdetails:
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.
Oplossing 1: Controleren of Docker is geïnstalleerd
De az acr login
opdracht roept de docker login
opdracht aan en gebruikt het Microsoft Entra-toegangstoken om te verifiëren bij de ACR. Hiervoor moeten de Docker-client en Docker-daemon worden geïnstalleerd op de computer waarop u de opdracht uitvoert. Zie Docker Engine installeren als u Docker Engine wilt installeren.
Oplossing 2: gebruik de opdracht az acr login met de parameter '--expose-token'
Wanneer de Docker-daemon niet wordt uitgevoerd in uw omgeving, gebruikt u de opdracht az acr login met de parameter --expose-token als u zich wilt verifiëren met ACR. Deze opdracht is handig als u scripts wilt uitvoeren waarvoor de Docker-daemon niet is vereist, maar alleen de Docker CLI (bijvoorbeeld wanneer u de Azure Cloud Shell gebruikt).
Fout 2: 'Deze opdracht vereist het uitvoeren van de docker-daemon, die niet wordt ondersteund in Azure Cloud Shell'
Hier volgt een voorbeeld van de foutdetails:
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.
Oplossing 1: Voer de opdracht az acr login -n <acr-name> uit in een andere omgeving
Voor de az acr login -n <acr-name>
opdracht moeten de Docker-client en docker-daemon worden uitgevoerd. De Azure Cloud Shell biedt alleen de Docker-client. U kunt deze fout oplossen door de az acr login -n <acr-name>
opdracht uit te voeren in een omgeving waarin de Docker-daemon is geïnstalleerd.
Oplossing 2: gebruik de opdracht az acr login met de parameter '--expose-token'
Voor de az acr login -n <acr-name>
opdracht moeten de Docker-client en docker-daemon worden uitgevoerd. De Azure Cloud Shell biedt alleen de Docker-client. De az acr login
opdracht met de --expose-token
parameter werkt echter voor omgevingen zonder de Docker-daemon, zoals de Azure Cloud Shell.
Fout 3: 'Niet geautoriseerd: verificatie vereist'
Hier volgt een voorbeeld van de foutdetails:
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."}]}
De fout geeft aan dat de verificatie is mislukt bij het openen van de ACR. Deze fout kan optreden bij het uitvoeren van de az acr login
of docker login
opdracht met een onjuiste gebruikersnaam en/of wachtwoord, of verlopen referenties (bij gebruik van een service-principal, een token met een bereiktoewijzing of een gebruiker met beheerdersrechten).
Oplossing: Gebruik de juiste/geldige gebruikersnaam en het juiste wachtwoord
Als u een gebruiker met beheerdersrechten gebruikt om te verifiëren, controleert u de referenties op de blade Toegangssleutels en of deze de referenties zijn die u in de
docker login
ofaz acr login
opdracht hebt gebruikt.Notitie
Een wachtwoord dat eerder is gebruikt, is mogelijk opnieuw gegenereerd.
Als u een token gebruikt dat is gekoppeld aan een bereiktoewijzing, controleert u de gebruikte referenties. Nadat u een wachtwoord voor het token hebt gegenereerd, moet u het ophalen en de referenties veilig opslaan omdat het wachtwoord niet meer wordt weergegeven nadat u het scherm hebt gesloten. Bekijk het bericht in de volgende schermopname:
Als u niet zeker weet welk wachtwoord u hebt gebruikt, kunt u het opnieuw genereren .
Als u een token gebruikt dat is gekoppeld aan een bereiktoewijzing, kan een vervaldatum worden ingesteld voor het wachtwoord. Als u de vervaldatum wilt weergeven, kunt u de Azure CLI-opdrachten uitvoeren die worden beschreven in Tokendetails weergeven of het token openen in Azure Portal en de vervaldatum controleren volgens de volgende schermopname:
Als u een service-principal gebruikt, moet u ervoor zorgen dat deze beschikt over de specifieke machtigingen voor verificatie met de ACR. Als u de specifieke machtigingen en beschikbare ingebouwde rollen wilt vinden, raadpleegt u Azure Container Registry-rollen en -machtigingen.
Als u een service-principal gebruikt, controleert u de gebruikte referenties. Nadat u een geheim hebt gegenereerd, moet u het ophalen en de referenties veilig opslaan omdat het wachtwoord niet meer wordt weergegeven nadat u het scherm hebt gesloten. Bekijk het bericht in de volgende schermopname:
Als u niet zeker weet welke geheime waarde u hebt gebruikt, kunt u overwegen een nieuw geheim te maken.
Als u een service-principal gebruikt, controleert u of het geheim niet is verlopen.
U kunt de geldigheid van het geheim controleren door de opdracht az ad app credential list uit te voeren:
az ad app credential list --id "$SP_ID" --query "[].endDateTime" -o tsv
U kunt ook de geldigheid van het geheim controleren door de kolom Verloopt in Azure Portal te controleren:
Als het geheim is verlopen, kunt u overwegen een nieuw geheim te maken.
Fout 4: 'Kan gebruikersreferenties voor beheerders niet ophalen'
Hier volgt een voorbeeld van de foutdetails:
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>)'.
Oplossing: zorg ervoor dat de gebruikte identiteit de specifieke machtigingen heeft
Zorg ervoor dat de identiteit (zoals een gebruiker of een beheerde identiteit) die wordt gebruikt voor verificatie, de specifieke machtigingen heeft. Als u de specifieke machtigingen en beschikbare ingebouwde rollen wilt vinden, raadpleegt u Azure Container Registry-rollen en -machtigingen.
Fout 5: 'Client met IP-adres <> is geen toegang toegestaan'
Hier volgt een voorbeeld van de foutdetails:
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."}]}
Oplossing: Zorg ervoor dat het apparaat dat u probeert te verifiëren verbinding heeft met de ACR
ACR heeft een ingebouwde firewall, een mechanisme om openbare toegang te beperken. Het kan volledige toegang toestaan, alleen toegang tot specifieke netwerken toestaan of openbare toegang volledig uitschakelen. De juiste verbinding is echter vereist voor een geslaagde verificatie. Zorg ervoor dat uw IP-adres toegang heeft tot het register en meld u aan. Zie Openbare IP-netwerkregels configureren voor meer informatie over het configureren van openbare toegang.
U kunt ook overwegen om Azure Private Link te gebruiken om privé verbinding te maken met het Azure-containerregister.
Contacteer ons voor hulp
Als u vragen hebt of hulp nodig hebt, maak een ondersteuningsaanvraag of vraag de Azure-communityondersteuning. U kunt ook productfeedback verzenden naar de Azure-feedbackcommunity.