Det går inte att hämta avbildningar från Azure Container Registry till Azure Web App
Den här artikeln innehåller vägledning för att felsöka de vanligaste felen du kan stöta på när du hämtar avbildningar från ett Azure-containerregister till Azure Web App.
Symptom och inledande felsökning
Vi rekommenderar att du startar felsökningen genom att kontrollera containerregistrets hälsotillstånd.
Kör följande kommando för att kontrollera containerregistrets hälsotillstånd:
az acr check-health --name <myregistry> --ignore-errors --yes
Om ett problem identifieras innehåller resultatet en felkod och en beskrivning. Mer information om dessa fel och möjliga lösningar finns i Felreferens för hälsokontroll.
Kommentar
Om du får Helm-relaterade eller notarierelaterade fel betyder det inte att containerregistret eller AKS inte fungerar eller har problem. Det anger bara problem som att Helm eller Notary inte är installerade, eller att Azure CLI inte är kompatibelt med den för närvarande installerade versionen av Helm eller Notary.
Identifiera sedan det pull-relaterade felmeddelandet som är viktigt för felsökning:
- Logga in på Azure-portalen.
- I webbappen väljer du Logg för Distributionscenter>. Välj incheckningen för att visa logginformationen. Du kan också visa loggarna för avbildningens pull-process i realtid genom att kontrollera Loggströmmen i avsnittet Övervakning .
Följande avsnitt hjälper dig att felsöka de vanligaste felen som visas i webbapploggarna.
Fel 1: Obehörig
Head \" https://<acr-name>.azurecr.io/v2/<repository>/manifests/<tag>\": unauthorized
Lösning för användarbaserad administratörsautentisering
Felet "obehörig" kan orsakas av felaktiga administratörsautentiseringsuppgifter. Detta inkluderar inloggningsservern, användarnamnet eller lösenordet som du konfigurerade i miljövariablerna för webbappen.
Följ dessa anvisningar för att lösa problemet:
- I Azure Portal navigerar du till registercontainern. I avsnittet Inställningar väljer du Åtkomstnycklar. Kontrollera inställningarna för administratörsanvändarens autentiseringsuppgifter för inloggningsservern, användarnamnet och lösenordet.
- Gå till webbappen. I avsnittet Inställningar väljer du Miljövariabler.
- Kontrollera att de tre variabler som har konfigurerats för containerregistret (inloggningsserver, användarnamn, lösenord) matchar inställningarna för administratörsanvändarens autentiseringsuppgifter i registercontainern.
Lösning för hanterad identitetsbaserad autentisering
När du använder Azure Web Apps hanterade identitetsbaserade autentisering måste behörigheten Microsoft.ContainerRegistry/registries/pull/read
tilldelas till den hanterade identiteten för att utföra pull-åtgärden.
De inbyggda Azure-rollerna som innehåller behörigheten Microsoft.ContainerRegistry/registries/pull/read
är följande:
- AcrPull
- AcrPush
- ReaderContributor
- Ägare
Mer information finns i Roller och behörigheter för Azure Container Registry.
När du initierar en pull-åtgärd från containerregistret tilldelas AcrPull-rollen automatiskt till den hanterade Azure Web App-identiteten. Du behöver inte lägga till behörigheter manuellt. Du måste dock se till att skapande av rolltilldelning inte blockeras av till exempel en Azure-princip. Kontrollera dessutom att rolltilldelningen inte har tagits bort.
Fel 2: Manifestet som taggas av <taggen> hittades inte
DockerApiException : Docker API responded with status code=NotFound, response={"message":"manifest for <acr-name>.azurecr.io/<repository>:<tag> not found: manifest unknown: manifest tagged by \"<tag>\" is not found"}
Lösning: Kontrollera att taggen finns
Felmeddelandet anger att taggen som är associerad med den avbildning som du försöker hämta inte hittades. Kontrollera att taggen finns i den associerade lagringsplatsen och registret.
Kör följande kommando för att använda Azure CLI för att hitta taggarna i den associerade lagringsplatsen och registret:
az acr repository show-tags -n <ContainerRegistryName> --repository <RepositoryName>
Följ dessa steg om du vill använda Azure Portal för att hitta taggarna som finns i den associerade lagringsplatsen och registret:
Gå till registercontainern. Under Tjänster väljer du Lagringsplatser, öppnar den associerade lagringsplatsen och kontrollerar sedan listan med taggar.
Kommentar
Kommandot az acr repository show-tags eller kontroll av lagringsplatserna från Azure Portal fungerar bara om containerregistrets nätverksregler tillåter det.
Fel 3: Klienten med IP tillåts inte åtkomst
DockerApiException: Docker API responded with status code=InternalServerError, response={"message":"Head \"https:// <acr-name>.azurecr.io/v2/<repository>/manifests/<tag>\": denied: client with IP '<web-app-outbound-ip>' is not allowed access. Refer https://aka.ms/acr/firewall to grant access."}
Lösning 1: Kontrollera att den inbyggda brandväggen för containerregistret tillåter enhetens IP-adress
Som standard accepterar ett containerregister anslutningar via Internet från alla nätverk. Containerregistret har en inbyggd brandvägg som kan begränsa åtkomsten till specifika IP-adresser eller CIDR-adresser, eller helt inaktivera åtkomst till offentliga nätverk.
Det här problemet kan inträffa om IP-adresserna för webbappen blockeras av containerregistrets inbyggda brandvägg.
Lös problemet genom att se till att den inbyggda brandväggen tillåter utgående IP-adresser för webbappen som måste hämta avbildningen.
Följ dessa steg för att hitta webbappens utgående IP-adresser:
- I Azure Portal navigerar du till din webbapp.
- På sidan Översikt letar du upp utgående IP-adress och väljer sedan Visa mer för att få en fullständig lista över de utgående IP-adresserna
Information om hur du använder Azure CLI för att hitta webbappens utgående IP-adresser finns i Hitta utgående IP-adresser i Azure App Service.
Lösning 2: Konfigurera integrering av virtuella nätverk för webbappen
Om du helt måste inaktivera åtkomsten till det offentliga nätverket eller endast tillåta valda nätverk i containerregistret utan att lägga till webbappens IP-adresser manuellt är det alternativa alternativet att hämta avbildningen privat. Om du vill hämta avbildningar privat måste du konfigurera containerregistret med hjälp av en privat slutpunkt och aktivera integrering av virtuella nätverk för webbappen.
Du kan konfigurera integrering av virtuella nätverk på webbappsidan genom att följa dessa steg:
I Azure Portal navigerar du till webbappen och väljer sedan Nätverk.
Under Konfiguration av utgående trafik konfigurerar du Integrering av virtuellt nätverk, väljer Lägg till integrering av virtuellt nätverk och anger sedan prenumeration, virtuellt nätverk och undernät.
På sidan Konfiguration av virtuellt nätverk kontrollerar du att alternativet Containeravbildningshämtning är valt.
Om du vill hämta avbildningen över det virtuella nätverket måste du aktivera Pull-avbildningen över VNet i distributionscentret för webbappen. Om containerregistret dessutom har den offentliga åtkomsten inaktiverad eller inställd på specifika nätverk kan du få meddelandet "Det gick inte att läsa in ACR-taggar – misslyckades", som du ser i följande exempel. Det felet förväntas i det här scenariot. Om detta inträffar är listrutealternativen för Bild och Tagg inte tillgängliga. Du måste ange avbildningen och taggen manuellt.
Nästa steg
Om den här felsökningsguiden inte löser problemet bör du tänka på följande:
Kontrollera nätverkssäkerhetsgrupper och routningstabeller som är associerade med dina undernät. Om en virtuell installation, till exempel en brandvägg, styr trafiken mellan undernät granskar du brandväggen och dess åtkomstregler.
Använd Kudu-tjänsten för ytterligare felsökning. Du kan ansluta till Kudu-tjänsten. Använd till exempel Bash för att testa DNS-matchning genom att köra nslookup <acr-name>.azurecr.io
eller kontrollera anslutningen med hjälp tcpping <acr-name>.azurecr.io
av .
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.