Behandeln von Problemen bei der Azure-Containerregistrierungsauthentifizierung
Azure Container Registry (ACR) ist ein privater Registrierungsdienst. Zum Ausführen von Vorgängen wie Push- oder Pullvorgängen (mit Ausnahme des anonymen Pullvorgangs ) müssen Sie sich zuerst bei der ACR authentifizieren.
Dieser Artikel hilft Ihnen bei der Behandlung von ACR-Authentifizierungsproblemen und stellt Lösungen für die am häufigsten auftretenden Fehler bereit, wenn Sie Bilder aus einer Containerregistrierung abrufen.
Erste Schritte bei der Problembehandlung
Identifizieren Sie die verwendete Authentifizierungsoption . Nachdem Sie eines ausgewählt haben, reproduzieren Sie das Authentifizierungsproblem, um den Fehler zu erhalten.
Beginnen Sie mit der Problembehandlung, indem Sie den Status Ihrer Azure-Containerregistrierung überprüfen.
Führen Sie den folgenden Befehl aus, um die Integrität der Containerregistrierung zu überprüfen:
az acr check-health --name <acr-name> --ignore-errors --yes
Wenn ein Problem erkannt wird, stellt die Befehlsausgabe einen Fehlercode und eine Beschreibung bereit. Weitere Informationen zum Fehlercode und möglichen Lösungen finden Sie in der Fehlerreferenz zur Integritätsprüfung.
Notiz
Wenn Sie Fehler im Zusammenhang mit Helm oder Notar erhalten, bedeutet dies nicht, dass Sie ein Problem haben, das sich auf Ihre Containerregistrierung oder Ihr Gerät auswirkt. Es weist nur darauf hin, dass Helm oder Notar nicht installiert ist oder dass die Azure CLI nicht mit der aktuell installierten Version von Helm oder Notary kompatibel ist.
Fehler 1: "DOCKER_COMMAND_ERROR Überprüfen Sie, ob docker-Client installiert und ausgeführt wird"
Hier ist ein Beispiel für die Fehlerdetails:
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ösung 1: Sicherstellen, dass Docker installiert ist
Der az acr login
Befehl ruft den docker login
Befehl auf und verwendet das Microsoft Entra-Zugriffstoken für die ACR-Authentifizierung. Er erfordert, dass der Docker-Client und der Docker-Daemon auf dem Computer installiert werden, auf dem Sie den Befehl ausführen. Informationen zum Installieren von Docker finden Sie unter Installieren des Docker-Moduls.
Lösung 2: Verwenden Des Befehls "az acr login" mit dem Parameter "--expose-token"
Wenn der Docker-Daemon nicht in Ihrer Umgebung ausgeführt wird, verwenden Sie den Az acr-Anmeldebefehl mit dem Parameter "--expose-token", wenn Sie sich bei ACR authentifizieren müssen. Dieser Befehl ist hilfreich, wenn Sie Skripts ausführen müssen, für die der Docker-Daemon nicht erforderlich ist, sondern nur die Docker CLI (z. B. bei Verwendung der Azure Cloud Shell).
Fehler 2: "Für diesen Befehl muss der Docker-Daemon ausgeführt werden, der in Azure Cloud Shell nicht unterstützt wird"
Hier ist ein Beispiel für die Fehlerdetails:
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ösung 1: Ausführen des Befehls "az acr login -n <acr-name>" in einer anderen Umgebung
Der az acr login -n <acr-name>
Befehl erfordert die Ausführung des Docker-Clients und des Docker-Daemons. Die Azure Cloud Shell stellt nur den Docker-Client bereit. Um diesen Fehler zu beheben, führen Sie den az acr login -n <acr-name>
Befehl in einer Umgebung aus, in der der Docker-Daemon installiert ist.
Lösung 2: Verwenden Des Befehls "az acr login" mit dem Parameter "--expose-token"
Der az acr login -n <acr-name>
Befehl erfordert die Ausführung des Docker-Clients und des Docker-Daemons. Die Azure Cloud Shell stellt nur den Docker-Client bereit. Der az acr login
Befehl mit dem --expose-token
Parameter funktioniert jedoch für Umgebungen ohne Docker-Daemon, z. B. die Azure Cloud Shell.
Fehler 3: "Nicht autorisiert: Authentifizierung erforderlich"
Hier ist ein Beispiel für die Fehlerdetails:
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."}]}
Der Fehler gibt an, dass die Authentifizierung beim Zugriff auf die ACR fehlgeschlagen ist. Dieser Fehler kann auftreten, wenn der az acr login
docker login
Oder-Befehl mit einem falschen Benutzernamen und/oder Kennwort oder abgelaufenen Anmeldeinformationen ausgeführt wird (bei Verwendung eines Dienstprinzipals, eines Tokens mit einer Bereichszuordnung oder eines Administratorbenutzers).
Lösung: Verwenden Des richtigen/gültigen Benutzernamens und Kennworts
Wenn Sie einen Administratorbenutzer für die Authentifizierung verwenden, überprüfen Sie die Anmeldeinformationen im Blatt "Zugriffstasten" und ob sie die im Oder
az acr login
Befehl verwendeten sinddocker login
.Notiz
Ein Kennwort, das verwendet wurde, bevor möglicherweise neu generiert wurde.
Wenn Sie ein Token verwenden, das einer Bereichszuordnung zugeordnet ist, überprüfen Sie die verwendeten Anmeldeinformationen. Nachdem Sie ein Kennwort für das Token generiert haben, müssen Sie es abrufen und die Anmeldeinformationen sicher speichern, da das Kennwort nach dem Schließen des Bildschirms nicht mehr angezeigt wird. Sehen Sie sich die Meldung im folgenden Screenshot an:
Wenn Sie sich nicht sicher sind, dass Sie das verwendete Kennwort verwenden, sollten Sie es neu generieren .
Wenn Sie ein Token verwenden, das einer Bereichszuordnung zugeordnet ist, kann ein Ablaufdatum für das Kennwort festgelegt werden. Um das Ablaufdatum anzuzeigen, können Sie die unter "Tokendetails anzeigen" beschriebenen Azure CLI-Befehle ausführen oder das Token im Azure-Portal öffnen und das Ablaufdatum wie im folgenden Screenshot überprüfen:
Wenn Sie einen Dienstprinzipal verwenden, stellen Sie sicher, dass er über die spezifischen Berechtigungen zum Authentifizieren mit dem ACR verfügt. Informationen zu den spezifischen Berechtigungen und verfügbaren integrierten Rollen finden Sie unter Azure Container Registry-Rollen und -Berechtigungen.
Wenn Sie einen Dienstprinzipal verwenden, überprüfen Sie die verwendeten Anmeldeinformationen. Nachdem Sie einen geheimen Schlüssel generiert haben, müssen Sie ihn abrufen und die Anmeldeinformationen sicher speichern, da das Kennwort nach dem Schließen des Bildschirms nicht mehr angezeigt wird. Sehen Sie sich die Meldung im folgenden Screenshot an:
Wenn Sie sich nicht sicher sind, welche geheimen Werte Sie verwendet haben, sollten Sie einen neuen geheimen Schlüssel erstellen.
Wenn Sie einen Dienstprinzipal verwenden, stellen Sie sicher, dass der geheime Schlüssel nicht abgelaufen ist.
Sie können die Gültigkeit des geheimen Schlüssels überprüfen, indem Sie den Befehl "Az Ad App-Anmeldeinformationsliste " ausführen:
az ad app credential list --id "$SP_ID" --query "[].endDateTime" -o tsv
Sie können auch die Gültigkeit des geheimen Schlüssels überprüfen, indem Sie die Spalte "Ablaufen" in der Azure-Portal überprüfen:
Wenn der geheime Schlüssel abgelaufen ist, können Sie erwägen , einen neuen geheimen Schlüssel zu erstellen.
Fehler 4: "Administratorbenutzeranmeldeinformationen können nicht abgerufen werden"
Hier ist ein Beispiel für die Fehlerdetails:
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ösung: Stellen Sie sicher, dass die verwendete Identität über die spezifischen Berechtigungen verfügt.
Stellen Sie sicher, dass die Identität (z. B. ein Benutzer oder eine verwaltete Identität), die für die Authentifizierung verwendet wird, über die spezifischen Berechtigungen verfügt. Informationen zu den spezifischen Berechtigungen und verfügbaren integrierten Rollen finden Sie unter Azure Container Registry-Rollen und -Berechtigungen.
Fehler 5: "Client mit IP-Adresse <> ist kein Zugriff zulässig"
Hier ist ein Beispiel für die Fehlerdetails:
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ösung: Stellen Sie sicher, dass das Gerät, das Sie authentifizieren möchten, über eine Verbindung mit dem ACR verfügt.
ACR verfügt über eine integrierte Firewall, bei der es sich um einen Mechanismus zum Einschränken des öffentlichen Zugriffs handelt. Er kann vollzugriff zulassen, nur auf bestimmte Netzwerke zugreifen oder den öffentlichen Zugriff vollständig deaktivieren. Für eine erfolgreiche Authentifizierung ist jedoch eine ordnungsgemäße Konnektivität erforderlich. Stellen Sie sicher, dass Ihre IP-Adresse auf die Registrierung zugreifen und sich anmelden darf. Weitere Informationen zum Konfigurieren des öffentlichen Zugriffs finden Sie unter Konfigurieren von Regeln für öffentliche IP-Netzwerke.
Alternativ können Sie die Verwendung von Azure Private Link in Betracht ziehen , um eine private Verbindung mit der Azure-Containerregistrierung herzustellen.
Kontaktieren Sie uns für Hilfe
Wenn Sie Fragen haben oder Hilfe mit Ihren Azure-Gutschriften benötigen, dann erstellen Sie beim Azure-Support eine Support-Anforderung oder fragen Sie den Azure Community-Support. Sie können auch Produktfeedback an die Azure Feedback Community senden.