Nie można ściągać obrazów z usługi Azure Container Registry do aplikacji internetowej platformy Azure
Ten artykuł zawiera wskazówki dotyczące rozwiązywania najczęstszych błędów, które mogą wystąpić podczas ściągania obrazów z rejestru kontenerów platformy Azure do aplikacji internetowej platformy Azure.
Objawy i początkowe rozwiązywanie problemów
Zalecamy rozpoczęcie rozwiązywania problemów przez sprawdzenie kondycji rejestru kontenerów.
Aby sprawdzić kondycję rejestru kontenerów, uruchom następujące polecenie:
az acr check-health --name <myregistry> --ignore-errors --yes
Jeśli zostanie wykryty problem, wyniki zawierają kod błędu i opis. Aby uzyskać więcej informacji na temat tych błędów i możliwych rozwiązań, zobacz Informacje o błędach sprawdzania kondycji.
Uwaga 16.
Jeśli wystąpią błędy związane z programem Helm lub notary, nie oznacza to, że usługa Container Registry lub AKS nie działa lub ma problem. Wskazuje tylko problemy, takie jak to, że program Helm lub Notary nie jest zainstalowany lub że interfejs wiersza polecenia platformy Azure nie jest zgodny z aktualnie zainstalowaną wersją programu Helm lub Notary.
Następnie zidentyfikuj komunikat o błędzie związany z ściąganiem, który jest niezbędny do rozwiązywania problemów:
- Zaloguj się w witrynie Azure Portal.
- W aplikacji internetowej wybierz pozycję Dziennik centrum>wdrażania. Wybierz zatwierdzenie, aby wyświetlić szczegóły dziennika. Dzienniki procesu ściągania obrazu można również wyświetlić w czasie rzeczywistym, sprawdzając strumień dziennika w sekcji Monitorowanie.
Poniższe sekcje ułatwiają rozwiązywanie problemów z najczęstszymi błędami wyświetlanymi w dziennikach aplikacji internetowej.
Błąd 1: Brak autoryzacji
Head \" https://<acr-name>.azurecr.io/v2/<repository>/manifests/<tag>\": unauthorized
Rozwiązanie dotyczące uwierzytelniania opartego na użytkownikach administratora
Błąd "nieautoryzowane" może być spowodowany nieprawidłowymi poświadczeniami administratora. Obejmuje to serwer logowania, nazwę użytkownika lub hasło skonfigurowane w zmiennych środowiskowych aplikacji internetowej.
Aby rozwiązać problem, wykonaj następujące kroki:
- W witrynie Azure Portal przejdź do kontenera rejestru. W sekcji Ustawienia wybierz pozycję Klucze dostępu. Sprawdź ustawienia poświadczeń użytkownika administratora serwera logowania, nazwy użytkownika i hasła.
- Przejdź do aplikacji internetowej. W sekcji Ustawienia wybierz pozycję Zmienne środowiskowe.
- Upewnij się, że trzy zmienne skonfigurowane dla rejestru kontenerów (serwer logowania, nazwa użytkownika, hasło) są zgodne z ustawieniami poświadczeń użytkownika administratora w kontenerze rejestru.
Rozwiązanie do uwierzytelniania opartego na tożsamościach zarządzanych
W przypadku korzystania z uwierzytelniania Microsoft.ContainerRegistry/registries/pull/read
opartego na tożsamości zarządzanej aplikacji internetowej platformy Azure uprawnienie musi zostać przypisane do tożsamości zarządzanej w celu wykonania akcji ściągnięcia.
Wbudowane role platformy Azure zawierające Microsoft.ContainerRegistry/registries/pull/read
uprawnienia są następujące:
- AcrPull
- AcrPush
- ReaderContributor
- Właściciel
Aby uzyskać więcej informacji, zobacz Role i uprawnienia usługi Azure Container Registry.
Po zainicjowaniu operacji ściągania z rejestru kontenerów rola AcrPull jest automatycznie przypisywana do tożsamości zarządzanej aplikacji internetowej platformy Azure. Nie musisz ręcznie dodawać uprawnień. Należy jednak upewnić się, że tworzenie przypisania roli nie jest blokowane przez na przykład zasady platformy Azure. Ponadto sprawdź, czy przypisanie roli nie zostało usunięte.
Błąd 2. Nie można odnaleźć manifestu oznaczonego tagiem <>
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"}
Rozwiązanie: Upewnij się, że tag istnieje
Komunikat o błędzie wskazuje, że nie znaleziono tagu skojarzonego z obrazem, który próbujesz ściągnąć. Upewnij się, że tag istnieje w skojarzonym repozytorium i rejestrze.
Aby użyć interfejsu wiersza polecenia platformy Azure do znalezienia tagów w skojarzonym repozytorium i rejestrze, uruchom następujące polecenie:
az acr repository show-tags -n <ContainerRegistryName> --repository <RepositoryName>
Aby użyć witryny Azure Portal do znalezienia tagów znajdujących się w skojarzonym repozytorium i rejestrze, wykonaj następujące kroki:
Przejdź do kontenera rejestru. W obszarze Usługi wybierz pozycję Repozytoria, otwórz skojarzone repozytorium, a następnie sprawdź listę tagów.
Uwaga 16.
Polecenie az acr repository show-tags lub sprawdzanie repozytoriów z witryny Azure Portal działa tylko wtedy, gdy reguły sieci rejestru kontenerów zezwalają na to.
Błąd 3. Klient z adresem IP nie ma dozwolonego dostępu
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."}
Rozwiązanie 1. Upewnij się, że wbudowana zapora rejestru kontenerów zezwala na adres IP urządzenia
Domyślnie rejestr kontenerów akceptuje połączenia przez Internet ze wszystkich sieci. Rejestr kontenerów ma wbudowaną zaporę, która może ograniczyć dostęp do określonych adresów IP lub ciDR albo całkowicie wyłączyć dostęp do sieci publicznej.
Ten problem może wystąpić, jeśli adresy IP aplikacji internetowej są blokowane przez wbudowaną zaporę rejestru kontenerów.
Aby rozwiązać ten problem, upewnij się, że wbudowana zapora zezwala na wychodzące adresy IP aplikacji internetowej, która musi ściągnąć obraz.
Aby znaleźć wychodzące adresy IP aplikacji internetowej, wykonaj następujące kroki:
- W witrynie Azure Portal przejdź do aplikacji internetowej.
- Na stronie Przegląd znajdź adres IP ruchu wychodzącego, a następnie wybierz pozycję Pokaż więcej, aby uzyskać pełną listę wychodzących adresów IP
Aby znaleźć wychodzące adresy IP aplikacji internetowej przy użyciu interfejsu wiersza polecenia platformy Azure, zobacz Znajdowanie wychodzących adresów IP w usłudze aplikacja systemu Azure Service.
Rozwiązanie 2. Konfigurowanie integracji sieci wirtualnej dla aplikacji internetowej
Jeśli musisz w pełni wyłączyć dostęp do sieci publicznej lub zezwolić tylko na wybrane sieci w rejestrze kontenerów bez ręcznego dodawania adresów IP aplikacji internetowej, alternatywną opcją jest prywatne ściąganie obrazu. Aby ściągnąć obrazy prywatnie, musisz skonfigurować rejestr kontenerów przy użyciu prywatnego punktu końcowego i włączyć integrację sieci wirtualnej dla aplikacji internetowej.
Integrację sieci wirtualnej można skonfigurować po stronie aplikacji internetowej, wykonując następujące kroki:
W witrynie Azure Portal przejdź do aplikacji internetowej, a następnie wybierz pozycję Sieć.
W obszarze Konfiguracja ruchu wychodzącego skonfiguruj integrację z siecią wirtualną, wybierz pozycję Dodaj integrację sieci wirtualnej, a następnie określ subskrypcję, sieć wirtualną i podsieć.
Na stronie Konfiguracja sieci wirtualnej upewnij się, że wybrano opcję ściągania obrazu kontenera.
Aby ściągnąć obraz za pośrednictwem sieci wirtualnej, należy włączyć opcję Ściąganie obrazu za pośrednictwem sieci wirtualnej w Centrum wdrażania aplikacji internetowej. Ponadto jeśli rejestr kontenerów ma wyłączony dostęp publiczny lub ustawiony na określone sieci, może zostać wyświetlony komunikat "Nie można załadować tagów usługi ACR — niepowodzenie", jak pokazano w poniższym przykładzie. Ten błąd jest oczekiwany w tym scenariuszu. W takim przypadku opcje listy rozwijanej obrazów i tagów nie będą dostępne. Musisz ręcznie wprowadzić obraz i tag.
Następne kroki
Jeśli te wskazówki dotyczące rozwiązywania problemów nie rozwiążą problemu, rozważ następujące kwestie:
Sprawdź sieciowe grupy zabezpieczeń i tabele tras skojarzone z podsieciami. Jeśli urządzenie wirtualne, takie jak zapora, kontroluje ruch między podsieciami, przejrzyj zaporę i jej reguły dostępu.
Użyj usługi Kudu, aby uzyskać dodatkowe informacje dotyczące rozwiązywania problemów. Możesz nawiązać połączenie z usługą Kudu. Na przykład użyj powłoki Bash, aby przetestować rozpoznawanie nazw DNS, uruchamiając polecenie nslookup <acr-name>.azurecr.io
lub sprawdzając łączność przy użyciu polecenia tcpping <acr-name>.azurecr.io
.
Skontaktuj się z nami, aby uzyskać pomoc
Jeśli masz pytania lub potrzebujesz pomocy, utwórz wniosek o pomoc techniczną lub zadaj pytanie w społeczności wsparcia dla platformy Azure. Możesz również przesłać opinię o produkcie do społeczności opinii na temat platformy Azure.