Dela via


Felsöka problem med Azure Container Registry-autentisering

Azure Container Registry (ACR) är en privat registertjänst. Om du vill utföra åtgärder som push- eller pull-överföring (förutom den anonyma pull-åtgärden ) måste du autentisera mot ACR först.

Den här artikeln hjälper dig att felsöka ACR-autentiseringsproblem och ger lösningar på de vanligaste felen som uppstår när du hämtar avbildningar från ett containerregister.

Inledande felsökning

  1. Identifiera det autentiseringsalternativ som du använder. När du har valt ett återskapar du autentiseringsproblemet för att få felet.

  2. Börja felsöka genom att kontrollera hälsotillståndet för ditt Azure-containerregister.

    Kör följande kommando för att kontrollera containerregistrets hälsotillstånd:

    az acr check-health --name <acr-name> --ignore-errors --yes
    

    Om ett problem upptäcks innehåller kommandoutdata en felkod och en beskrivning. Mer information om felkoden och möjliga lösningar finns i felreferensen för hälsokontroll.

    Kommentar

    Om du får fel relaterade till Helm eller Notary betyder det inte att du har problem som påverkar ditt containerregister eller din enhet. Det anger bara att Helm eller Notary inte är installerat eller att Azure CLI inte är kompatibelt med den för närvarande installerade versionen av Helm eller Notary.

Fel 1: "DOCKER_COMMAND_ERROR Kontrollera om Docker-klienten är installerad och körs"

Här är ett exempel på felinformationen:

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.

Lösning 1: Kontrollera att Docker är installerat

Kommandot az acr login anropar docker login kommandot och använder Microsoft Entra-åtkomsttoken för att autentisera mot ACR. Det kräver att Docker-klienten och Docker-daemon installeras på den dator där du kör kommandot. Information om hur du installerar Docker finns i Installera Docker Engine.

Lösning 2: Använd kommandot "az acr login" med parametern "--expose-token"

När Docker-daemonen inte körs i din miljö använder du kommandot az acr login med parametern --expose-token om du behöver autentisera med ACR. Det här kommandot är användbart när du behöver köra skript som inte kräver Docker-daemon utan bara Docker CLI (till exempel när du använder Azure Cloud Shell).

Fel 2: "Det här kommandot kräver att docker-daemon körs, vilket inte stöds i Azure Cloud Shell"

Här är ett exempel på felinformationen:

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.

Lösning 1: Kör kommandot "az acr login -n <acr-name>" i en annan miljö

Kommandot az acr login -n <acr-name> kräver att Docker-klienten och Docker-daemon körs. Azure Cloud Shell tillhandahåller endast Docker-klienten. Lös det här felet genom att az acr login -n <acr-name> köra kommandot i en miljö där Docker-daemonen är installerad.

Lösning 2: Använd kommandot "az acr login" med parametern "--expose-token"

Kommandot az acr login -n <acr-name> kräver att Docker-klienten och Docker-daemon körs. Azure Cloud Shell tillhandahåller endast Docker-klienten. Kommandot med parametern --expose-token fungerar dock az acr login för miljöer utan Docker-daemon, som Azure Cloud Shell.

Fel 3: "Obehörig: autentisering krävs"

Här är ett exempel på felinformationen:

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."}]}

Felet anger att autentiseringen misslyckades vid åtkomst till ACR. Det här felet kan inträffa när du kör az acr login kommandot eller docker login med ett felaktigt användarnamn och/eller lösenord eller utgångna autentiseringsuppgifter (när du använder tjänstens huvudnamn, en token med en omfångskarta eller en administratörsanvändare).

Lösning: Använd rätt/giltigt användarnamn och lösenord

  • Om du använder en administratörsanvändare för att autentisera kontrollerar du autentiseringsuppgifterna på bladet Åtkomstnycklar och om det är de som du använde i docker login kommandot eller az acr login .

    Skärmbild som visar bladet Åtkomstnycklar för ACR.

    Kommentar

    Ett lösenord som användes tidigare kan ha återskapats.

  • Om du använder en token som är associerad med en omfångskarta kontrollerar du de autentiseringsuppgifter som används. När du har genererat ett lösenord för token måste du hämta det och lagra autentiseringsuppgifterna på ett säkert sätt eftersom lösenordet inte visas längre när du har stängt skärmen. Se meddelandet i följande skärmbild:

    Skärmbild som visar meddelandet

    Om du är osäker på vilket lösenord du använde kan du överväga att återskapa det.

  • Om du använder en token som är associerad med en omfångskarta kan ett förfallodatum anges för lösenordet. Om du vill visa förfallodatumet kan du köra Azure CLI-kommandona som beskrivs i Visa tokeninformation eller öppna token i Azure Portal och kontrollera förfallodatumet enligt följande skärmbild:

    Skärmbild som visar kolumnen

  • Om du använder ett huvudnamn för tjänsten kontrollerar du att det har de specifika behörigheterna för att autentisera med ACR. Information om hur du hittar specifika behörigheter och tillgängliga inbyggda roller finns i Roller och behörigheter för Azure Container Registry.

  • Om du använder ett huvudnamn för tjänsten kontrollerar du vilka autentiseringsuppgifter som används. När du har genererat en hemlighet måste du hämta den och lagra autentiseringsuppgifterna på ett säkert sätt eftersom lösenordet inte visas längre när du har stängt skärmen. Se meddelandet i följande skärmbild:

    Skärmbild som visar meddelandet

    Om du är osäker på det hemliga värde som du använde kan du överväga att skapa en ny hemlighet.

  • Om du använder ett huvudnamn för tjänsten kontrollerar du att hemligheten inte har upphört att gälla.

    Du kan kontrollera hemlighetens giltighet genom att köra kommandot az ad app credential list :

    az ad app credential list --id "$SP_ID" --query "[].endDateTime" -o tsv
    

    Du kan också kontrollera hemlighetens giltighet genom att verifiera kolumnen Upphör att gälla i Azure Portal:

    Skärmbild som visar kolumnen ACR

    Om hemligheten har upphört att gälla kan du överväga att skapa en ny hemlighet.

Fel 4: "Det går inte att hämta administratörsanvändarautentiseringsuppgifter"

Här är ett exempel på felinformationen:

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>)'.

Lösning: Kontrollera att den identitet som används har de specifika behörigheterna

Kontrollera att den identitet (till exempel en användare eller en hanterad identitet) som används för att autentisera har de specifika behörigheterna. Information om hur du hittar specifika behörigheter och tillgängliga inbyggda roller finns i Roller och behörigheter för Azure Container Registry.

Fel 5: "Klient med IP-adress <> tillåts inte åtkomst"

Här är ett exempel på felinformationen:

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."}]}

Lösning: Kontrollera att enheten som du försöker autentisera har anslutning till ACR

ACR har en inbyggd brandvägg, vilket är en mekanism för att begränsa offentlig åtkomst. Den kan tillåta fullständig åtkomst, endast tillåta åtkomst till specifika nätverk eller helt inaktivera offentlig åtkomst. Rätt anslutning krävs dock för lyckad autentisering. Se till att din IP-adress har behörighet att komma åt och logga in i registret. Mer information om hur du konfigurerar offentlig åtkomst finns i Konfigurera regler för offentliga IP-nätverk.

Du kan också överväga att använda Azure Private Link för att ansluta privat till Azure-containerregistret.

Kontakta oss för att få hjälp

Om du har frågor eller behöver hjälp skapar du en supportförfrågan eller frågar Azure community support. Du kan också skicka produktfeedback till Azure-feedbackcommunityn.