Rozwiązywanie problemów z uwierzytelnianiem w usłudze Azure Container Registry
Usługa Azure Container Registry (ACR) to prywatna usługa rejestru. Aby wykonać operacje, takie jak wypychanie lub ściąganie (z wyjątkiem anonimowej operacji ściągania ), najpierw należy uwierzytelnić się w usłudze ACR.
Ten artykuł ułatwia rozwiązywanie problemów z uwierzytelnianiem usługi ACR i zawiera rozwiązania najczęstszych błędów występujących podczas ściągania obrazów z rejestru kontenerów.
Początkowe rozwiązywanie problemów
Zidentyfikuj używaną opcję uwierzytelniania. Po wybraniu jednego z nich odtwórz problem z uwierzytelnianiem, aby uzyskać błąd.
Rozpocznij rozwiązywanie problemów, sprawdzając kondycję rejestru kontenerów platformy Azure.
Aby sprawdzić kondycję rejestru kontenerów, uruchom następujące polecenie:
az acr check-health --name <acr-name> --ignore-errors --yes
Jeśli zostanie wykryty problem, dane wyjściowe polecenia zawierają kod błędu i opis. Aby uzyskać więcej informacji na temat kodu błędu i możliwych rozwiązań, zobacz dokumentację dotyczącą błędu sprawdzania kondycji.
Uwaga 16.
Jeśli wystąpią błędy związane z programem Helm lub notary, nie oznacza to, że masz problem dotyczący rejestru kontenerów lub urządzenia. Wskazuje tylko, ż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.
Błąd 1: "DOCKER_COMMAND_ERROR Sprawdź, czy klient platformy Docker jest zainstalowany i uruchomiony"
Oto przykład szczegółów błędu:
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.
Rozwiązanie 1. Upewnij się, że platforma Docker jest zainstalowana
Polecenie az acr login
wywołuje docker login
polecenie i używa tokenu dostępu firmy Microsoft Entra do uwierzytelniania w usłudze ACR. Wymaga to zainstalowania klienta platformy Docker i demona platformy Docker na maszynie, na której jest wykonywane polecenie. Aby zainstalować platformę Docker, zobacz Instalowanie aparatu platformy Docker.
Rozwiązanie 2. Użyj polecenia "az acr login" z parametrem "--expose-token"
Jeśli demon platformy Docker nie działa w danym środowisku, jeśli musisz uwierzytelnić się za pomocą usługi ACR, użyj polecenia az acr login z parametrem --expose-token. To polecenie jest przydatne, gdy konieczne jest uruchomienie skryptów, które nie wymagają demona platformy Docker, ale tylko interfejsu wiersza polecenia platformy Docker (na przykład w przypadku korzystania z usługi Azure Cloud Shell).
Błąd 2: "To polecenie wymaga uruchomienia demona platformy Docker, który nie jest obsługiwany w usłudze Azure Cloud Shell"
Oto przykład szczegółów błędu:
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.
Rozwiązanie 1. Uruchom polecenie "az acr login -n <acr-name>" w innym środowisku
Polecenie az acr login -n <acr-name>
wymaga uruchomienia klienta platformy Docker i demona platformy Docker. Usługa Azure Cloud Shell udostępnia tylko klienta platformy Docker. Aby rozwiązać ten błąd, uruchom az acr login -n <acr-name>
polecenie w środowisku, w którym zainstalowano demona platformy Docker.
Rozwiązanie 2. Użyj polecenia "az acr login" z parametrem "--expose-token"
Polecenie az acr login -n <acr-name>
wymaga uruchomienia klienta platformy Docker i demona platformy Docker. Usługa Azure Cloud Shell udostępnia tylko klienta platformy Docker. Jednak az acr login
polecenie z parametrem --expose-token
działa w środowiskach bez demona platformy Docker, takiego jak usługa Azure Cloud Shell.
Błąd 3: "Brak autoryzacji: wymagane uwierzytelnianie"
Oto przykład szczegółów błędu:
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."}]}
Błąd wskazuje, że uwierzytelnianie nie powiodło się podczas uzyskiwania dostępu do usługi ACR. Ten błąd może wystąpić podczas uruchamiania az acr login
polecenia lub docker login
z nieprawidłową nazwą użytkownika i/lub hasłem lub wygasłymi poświadczeniami (w przypadku używania jednostki usługi, tokenu z mapą zakresu lub użytkownika administracyjnego).
Rozwiązanie: Użyj poprawnej/prawidłowej nazwy użytkownika i hasła
Jeśli używasz użytkownika administratora do uwierzytelniania, sprawdź poświadczenia w bloku Klucze dostępu i czy są to te, które zostały użyte w poleceniu
docker login
lubaz acr login
.Uwaga 16.
Hasło, które zostało użyte wcześniej, mogło zostać ponownie wygenerowane.
Jeśli używasz tokenu skojarzonego z mapą zakresu, sprawdź użyte poświadczenia. Po wygenerowaniu hasła dla tokenu należy go pobrać i bezpiecznie zapisać poświadczenia, ponieważ hasło nie będzie już wyświetlane po zamknięciu ekranu. Zobacz komunikat na poniższym zrzucie ekranu:
Jeśli nie masz pewności co do użytego hasła, rozważ jego ponowne wygenerowanie .
Jeśli używasz tokenu skojarzonego z mapą zakresu, dla hasła można ustawić datę wygaśnięcia. Aby wyświetlić datę wygaśnięcia, możesz uruchomić polecenia interfejsu wiersza polecenia platformy Azure opisane w temacie Pokaż szczegóły tokenu lub otworzyć token w witrynie Azure Portal i sprawdzić datę wygaśnięcia zgodnie z poniższym zrzutem ekranu:
Jeśli używasz jednostki usługi, upewnij się, że ma określone uprawnienia do uwierzytelniania za pomocą usługi ACR. Aby znaleźć określone uprawnienia i dostępne wbudowane role, zobacz Role i uprawnienia usługi Azure Container Registry.
Jeśli używasz jednostki usługi, sprawdź użyte poświadczenie. Po wygenerowaniu wpisu tajnego musisz go pobrać i bezpiecznie zapisać poświadczenia, ponieważ hasło nie będzie już wyświetlane po zamknięciu ekranu. Zobacz komunikat na poniższym zrzucie ekranu:
Jeśli nie masz pewności co do użytej wartości wpisu tajnego, rozważ utworzenie nowego wpisu tajnego.
Jeśli używasz jednostki usługi, upewnij się, że wpis tajny nie wygasł.
Ważność wpisu tajnego można sprawdzić, uruchamiając polecenie az ad app credential list :
az ad app credential list --id "$SP_ID" --query "[].endDateTime" -o tsv
Możesz też sprawdzić poprawność wpisu tajnego, sprawdzając kolumnę Wygasa w witrynie Azure Portal:
Jeśli wpis tajny wygasł, możesz rozważyć utworzenie nowego wpisu tajnego.
Błąd 4: "Nie można uzyskać poświadczeń użytkownika administratora"
Oto przykład szczegółów błędu:
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>)'.
Rozwiązanie: upewnij się, że użyta tożsamość ma określone uprawnienia
Upewnij się, że tożsamość (na przykład użytkownik lub tożsamość zarządzana) używana do uwierzytelniania ma określone uprawnienia. Aby znaleźć określone uprawnienia i dostępne wbudowane role, zobacz Role i uprawnienia usługi Azure Container Registry.
Błąd 5: "Klient z adresem> IP <jest niedozwolony dostęp"
Oto przykład szczegółów błędu:
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."}]}
Rozwiązanie: upewnij się, że urządzenie, które próbujesz uwierzytelnić, ma łączność z usługą ACR
Usługa ACR ma wbudowaną zaporę, która jest mechanizmem ograniczania dostępu publicznego. Może zezwalać na pełny dostęp, zezwalać na dostęp tylko do określonych sieci lub w pełni wyłączyć dostęp publiczny. Jednak do pomyślnego uwierzytelnienia jest wymagana właściwa łączność. Upewnij się, że adres IP jest dozwolony, aby uzyskać dostęp do rejestru i zalogować się do tego rejestru. Aby uzyskać więcej informacji na temat konfigurowania dostępu publicznego, zobacz Konfigurowanie reguł sieci publicznych adresów IP.
Alternatywnie możesz rozważyć użycie usługi Azure Private Link, aby połączyć się prywatnie z rejestrem kontenerów platformy Azure.
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.