Bearbeiten

Häufig gestellte Fragen: Azure Container Registry in Azure Stack Hub

Dieser Artikel behandelt häufig gestellte Fragen zu Azure Container Registry.

Hinweise zur Problembehandlung in der Registrierung finden Sie hier:

Ressourcenverwaltung

Kann ich eine Azure Container Registry-Instanz in Azure Stack Hub mithilfe einer Resource Manager-Vorlage erstellen?

Ja. Hier sehen Sie eine Vorlage , die Sie zum Erstellen einer Registrierung verwenden können. Diese Vorlage ist für die öffentliche Azure-Cloud vorgesehen. Wenn Sie diese Vorlage für Azure Stack Hub verwenden möchten, ändern Sie die API-Version in 2019-05-01. Andernfalls schlägt die Bereitstellung fehl.

Gibt es in ACR in Azure Stack Hub Überprüfungen auf Sicherheitsrisiken für Images?

Nein. Derzeit gibt es keine Integration in Azure Security Center für Registrierungen, die in Azure Stack Hub bereitgestellt werden. Es gibt Drittanbieter- und Open Source-Optionen, die genutzt werden können, um diesen Bedarf an verbundenen oder nicht verbundenen Azure Stack Hub-Bereitstellungen zu decken.

Wie konfiguriere ich Kubernetes mit Azure Container Registry?

Siehe die Dokumentation zu Kubernetes und Anweisungen zu Azure Kubernetes Service.

Wie erhalte ich Administratoranmeldeinformationen für eine Containerregistrierung?

Wichtig

Das Administratorbenutzerkonto ist so ausgelegt, dass ein einzelner Benutzer auf die Registrierung zugreift (hauptsächlich für Testzwecke). Sie sollten die Administratorkonto-Anmeldeinformationen nicht für mehrere Benutzer freigeben. Für Benutzer und Dienstprinzipale wird für monitorlose Szenarien einzelne Identität empfohlen. Siehe Übersicht über die Authentifizierung.

Stellen Sie vor dem Abrufen von Administratoranmeldeinformationen sicher, dass die Registrierung des Administratorbenutzers aktiviert ist.

So rufen Sie Anmeldeinformationen mithilfe der Azure CLI ab

az acr credential show -n myRegistry

Verwenden von Azure PowerShell:

Invoke-AzureRmResourceAction -Action listCredentials -ResourceType Microsoft.ContainerRegistry/registries -ResourceGroupName myResourceGroup -ResourceName myRegistry

Wie erhalte ich Administratoranmeldeinformationen in einer Resource Manager-Vorlage?

Wichtig

Das Administratorbenutzerkonto ist so ausgelegt, dass ein einzelner Benutzer auf die Registrierung zugreift (hauptsächlich für Testzwecke). Sie sollten die Administratorkonto-Anmeldeinformationen nicht für mehrere Benutzer freigeben. Für Benutzer und Dienstprinzipale wird für monitorlose Szenarien einzelne Identität empfohlen. Siehe Übersicht über die Authentifizierung.

Stellen Sie vor dem Abrufen von Administratoranmeldeinformationen sicher, dass die Registrierung des Administratorbenutzers aktiviert ist.

So rufen Sie das erste Kennwort ab

{
    "password": "[listCredentials(resourceId('Microsoft.ContainerRegistry/registries', 'myRegistry'), '2017-10-01').passwords[0].value]"
}

So rufen Sie das zweite Kennwort ab

{
    "password": "[listCredentials(resourceId('Microsoft.ContainerRegistry/registries', 'myRegistry'), '2017-10-01').passwords[1].value]"
}

Wie pushe ich ein Containerimage in Azure Container Registry zu einer getrennten Azure Stack Hub-Bereitstellung, die Kubernetes ausführt?

Sie können eine Computer-zu-Computer-Imageübertragung über ein lokales Netzwerk von einem Computer ausführen, auf dem bereits die erforderlichen Containerimages vorhanden sind. Gehen Sie dazu folgendermaßen vor:

  1. Rufen Sie zunächst die erforderlichen Containerimages mithilfe eines Computers mit Internetverbindung mithilfe von Docker CLI und Docker-Pullbefehl ab. Weitere Informationen finden Sie unter Importieren von Containerimages in eine Containerregistrierung.

  2. Nachdem Sie die erforderlichen Images importiert haben, transportieren Sie den Computer an den Speicherort der getrennten Azure Hub-Instanz.

  3. Verwenden Sie Docker-Tag- und Docker-Push-Befehl, um das Image zu taggen und zur lokalen Azure Container Registry im Azure Stack Hub-Repository zu pushen.

Registrierungsvorgänge

Wie greife ich auf die HTTP-API V2 für Docker-Registrierungen zu?

ACR unterstützt die HTTP-API V2 für Docker-Registrierungen. Der Zugriff auf die APIs erfolgt über https://<your registry login server>/v2/. Beispiel: https://mycontainerregistry.azsacr.<regionname>.<fqdn>/v2/

Wie lösche ich alle Manifeste, auf die kein Tag in einem Repository verweist?

Bash:

az acr manifest list-metadata --name myRepository --registry myRegistry --query "[?tags[0]==null].digest" --output tsv  | xargs -I% az acr repository delete --name myRegistry --image myRepository@%

Mit PowerShell:

az acr manifest list-metadata --name myRepository --registry myRegistry --query "[?tags[0]==null].digest" --output tsv | %{ az acr repository delete --name myRegistry --image myRepository@$_ }

Hinweis

Sie können im Löschbefehl --yes hinzufügen, um die Bestätigung zu überspringen.

Weitere Informationen finden Sie unter Löschen von Containerimages in Azure Container Registry.

Warum wird die Nutzung des Registrierungskontingents nach dem Löschen von Images nicht reduziert?

Diese Situation kann eintreten, wenn andere Containerimages noch auf die zugrunde liegenden Ebenen verweisen. Wenn Sie ein Image ohne Verweise löschen, wird die Registrierungsnutzung binnen weniger Minuten aktualisiert.

Wie überprüfe ich Speicherkontingentänderungen?

Erstellen Sie mithilfe der folgenden Docker-Datei ein Image mit einer 1-GB-Ebene. Dadurch wird sichergestellt, dass das Image eine Ebene hat, die mit keinem anderen Image in der Registrierung gemeinsam genutzt wird.

FROM alpine
RUN dd if=/dev/urandom of=1GB.bin  bs=32M  count=32
RUN ls -lh 1GB.bin

Erstellen Sie das Image, und übertragen Sie es per Push mithilfe der Docker CLI in Ihre Registrierung.

docker build -t myregistry.azsacr.<regionname>.<fqdn>/1gb:latest .
docker push myregistry.azsacr.<regionname>.<fqdn>/1gb:latest

Sie sollten sich im Azure Stack Hub-Portal davon überzeugen können, dass die Speichernutzung gestiegen ist. Sie können die Nutzung auch über die CLI abfragen.

az acr show-usage -n myregistry

Löschen Sie das Image mithilfe der Azure CLI oder des Portals, und überprüfen Sie nach wenigen Minuten die aktualisierte Nutzung.

az acr repository delete -n myregistry --image 1gb

Wie authentifiziere ich mich bei meiner Registrierung bei Ausführung der CLI in einem Container?

Sie müssen den Azure CLI-Container ausführen, indem Sie das Docker-Socket einbinden:

docker run -it -v /var/run/docker.sock:/var/run/docker.sock azuresdk/azure-cli-python:dev

Installieren Sie im Container docker:

apk --update add docker

Authentifizieren Sie sich anschließend bei Ihrer Registrierung:

az acr login -n MyRegistry

So aktivieren Sie TLS 1.2

Aktivieren Sie TLS 1.2 mithilfe eines beliebigen aktuellen Docker-Clients (Version 18.03.0 und höher).

Wichtig

Ab dem 13. Januar 2020 setzt Azure Container Registry voraus, dass alle sicheren Verbindungen von Servern und Anwendungen TLS 1.2 verwenden. Die Unterstützung für TLS 1.0 und 1.1 wird eingestellt.

Unterstützt Azure Container Registry in Azure Stack Hub die Inhaltsvertrauensstellung?

Nein, das aktuelle Release von Azure Container Registry in Azure Stack Hub unterstützt nur die SKU „Standard“ und keine Inhaltsvertrauensstellung.

Wie gewähre ich Zugriff auf Pull- oder Pushvorgänge für Images ohne Berechtigung zum Verwalten der Registrierungsressource?

ACR unterstützt benutzerdefinierte Rollen, die unterschiedliche Berechtigungsebenen bereitstellen. Insbesondere ermöglichen die Rollen AcrPull und AcrPush den Benutzern Pull- bzw. Pushvorgänge für Images ohne die Berechtigung zur Verwaltung der Registrierungsressource in Azure.

  • Azure Stack Hub-Portal: Ihre Registrierung > Zugriffssteuerung (IAM) > Hinzufügen (wählen Sie für die Rolle AcrPull oder AcrPush aus).

  • Azure CLI: Ermitteln Sie die Ressourcen-ID der Registrierung, indem Sie den folgenden Befehl ausführen:

    az acr show -n myRegistry
    

    Anschließend können Sie die Rolle AcrPull oder AcrPush einem Benutzer zuweisen (im folgenden Beispiel wird AcrPull verwendet):

    az role assignment create --scope resource_id --role AcrPull --assignee user@example.com
    

    Alternativ dazu können Sie die Rolle einem Dienstprinzipal zuweisen, der anhand seiner Anwendungs-ID identifiziert wird:

    az role assignment create --scope resource_id --role AcrPull --assignee 00000000-0000-0000-0000-000000000000
    

Die zugewiesene Person kann sich authentifizieren und auf Images in der Registrierung zugreifen.

  • So authentifizieren Sie sich bei einer Registrierung

    az acr login -n myRegistry 
    
  • So listen Sie Repositorys auf

    az acr repository list -n myRegistry
    
  • So rufen Sie ein Image per Pull ab

    docker pull myregistry.azsacr.<regionname>.<fqdn>/hello-world
    

Bei ausschließlichem Verwenden der Rolle AcrPull oder AcrPush hat die zugewiesene Person nicht die Berechtigung, die Registrierungsressource in Azure zu verwalten. Mit az acr list oder az acr show -n myRegistry kann beispielsweise die Registrierung nicht angezeigt werden.

Wie kann ich nicht verteilbare Ebenen an eine Registrierung pushen?

Eine nicht verteilbare Ebene in einem Manifest enthält einen URL-Parameter, aus dem Inhalte abgerufen werden können. Einige Anwendungsfälle für das Aktivieren des Pushens von nicht verteilbaren Ebenen sind Registrierungen mit Netzwerkeinschränkungen, Air Gap-Registrierungen mit eingeschränktem Zugriff oder Registrierungen ohne Internetverbindung.

Wenn Sie beispielsweise NSG-Richtlinien (Netzwerksicherheitsgruppe) so eingerichtet haben, dass eine VM (virtueller Computer) Images nur aus Ihrer Azure Container Registry-Instanz pullen kann, gibt Docker Fehler für fremde bzw. nicht verteilbare Ebenen aus. Ein Windows Server Core-Image würde beispielsweise fremde Ebenenverweise auf Azure Container Registry im Manifest enthalten und in diesem Szenario Fehler bei Pullvorgängen ausgeben.

So aktivieren Sie das Pushen von nicht verteilbaren Ebenen:

  1. Bearbeiten Sie die Datei daemon.json, die sich unter /etc/docker/ (Linux) und unter C:\ProgramData\docker\config\daemon.json (Windows Server) befindet. Wenn die Datei zuvor leer war, fügen Sie die folgenden Inhalte hinzu:

    {
      "allow-nondistributable-artifacts": ["myregistry.azsacr.<regionname>.<fqdn>"]
    }
    

    Hinweis

    Der Wert ist ein Array von Registrierungsadressen, die durch Kommas getrennt sind.

  2. Speichern und beenden Sie die Datei.

  3. Starten Sie Docker neu.

Wenn Sie Images an die Registrierungen in der Liste pushen, werden ihre nicht verteilbaren Ebenen an die Registrierung gepusht.

Warnung

Nicht verteilbare Artefakte weisen in der Regel Einschränkungen dazu auf, wie und wo sie verteilt und freigegeben werden können. Verwenden Sie dieses Feature nur zum Pushen von Artefakten an private Registrierungen. Stellen Sie sicher, dass Sie jegliche Geschäftsbedingungen einhalten, die sich mit der Weiterverteilung von nicht verteilbaren Artefakten befassen.

Diagnose und Integritätsprüfungen

Überprüfen der Integrität mit „az acr check-health“

Informationen zur Behebung von Problemen mit der allgemeinen Umgebung und der Registrierung finden Sie unter Überprüfen der Integrität einer Azure-Containerregistrierung.

Docker pull fails with error: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers) (Docker-Pullvorgang mit Fehler fehlgeschlagen: Net/http: Anforderung während des Wartens auf Verbindung abgebrochen [Client.Timeout-Wert beim Warten auf Header überschritten])

  • Wenn dieser Fehler ein vorübergehendes Problem ist, wird eine Wiederholung erfolgreich sein.
  • Wenn docker pull ständig ausfällt, kann dies an einem Problem mit dem Docker-Daemon liegen. Das Problem kann in der Regel durch einen Neustart des Docker-Daemons behoben werden.
  • Wenn dieses Problem nach dem Neustart des Docker-Daemons weiterhin besteht, liegt ggf. ein Problem mit der Netzwerkverbindung des Computers vor. Um zu überprüfen, ob das allgemeine Netzwerk auf dem Computer funktionsfähig ist, führen Sie den folgenden Befehl zum Testen der Endpunktkonnektivität aus. Die Mindestversion von az acr, die diesen Befehl für die Konnektivitätsprüfung enthält, ist 2.2.9. Aktualisieren Sie Ihre Azure-Befehlszeilenschnittstelle, falls Sie eine ältere Version verwenden.
az acr check-health -n myRegistry
  • Sie sollten für alle Docker-Clientvorgänge stets einen Wiederholungsmechanismus einrichten.

Docker-Pullvorgang ist langsam

Verwenden Sie dieses Tool, um die Downloadgeschwindigkeit Ihres Computernetzwerks zu testen.

Docker-Pushvorgang ist langsam

Verwenden Sie dieses Tool, um die Uploadgeschwindigkeit Ihres Computernetzwerks zu testen.

Docker-Pushvorgang erfolgreich, aber für den Docker-Pullvorgang tritt ein Fehler auf: Nicht autorisiert: Authentifizierung erforderlich

Dieser Fehler kann bei der Red Hat-Version des Docker-Daemons auftreten, bei der --signature-verification standardmäßig aktiviert ist. Sie können die Docker-Daemon-Optionen für Red Hat Enterprise Linux (RHEL) oder Fedora überprüfen, indem Sie den folgenden Befehl ausführen:

grep OPTIONS /etc/sysconfig/docker

Fedora 28 Server bietet beispielsweise die folgenden Docker-Daemon-Optionen:

OPTIONS='--selinux-enabled --log-driver=journald --live-restore'

Wenn --signature-verification=false fehlt, schlägt docker pull mit einem Fehler wie dem folgenden fehl:

Trying to pull repository myregistry.azsacr.<regionname>.<fqdn>/myimage ...
unauthorized: authentication required

So beheben Sie den Fehler

  1. Fügen Sie der Docker-Daemon-Konfigurationsdatei /etc/sysconfig/docker die Option --signature-verification=false hinzu. Beispiel:

    OPTIONS='--selinux-enabled --log-driver=journald --live-restore --signature-verification=false'

  2. Starten Sie den Docker-Daemon-Dienst neu, indem Sie den folgenden Befehl ausführen:

    sudo systemctl restart docker.service
    

Details zu --signature-verification finden Sie, indem Sie man dockerd ausführen.

az acr login erfolgreich, aber für Docker tritt ein Fehler auf: "Nicht autorisiert: Authentifizierung erforderlich"

Stellen Sie sicher, dass Sie für die Server-URL Kleinbuchstaben verwenden (z. B. docker push myregistry.azsacr.<regionname>.<fqdn>/myimage:latest), auch wenn der Name der Registrierungsressource auch aus Großbuchstaben oder Groß- und Kleinbuchstaben besteht (z. B. myRegistry).

Aktivieren und Abrufen der Debugprotokolle des Docker-Daemons

Starten Sie dockerd mit der Option debug. Erstellen Sie zunächst die Docker-Daemon-Konfigurationsdatei (/etc/docker/daemon.json), falls sie noch nicht vorhanden ist, und fügen Sie die Option debug hinzu:

{    
    "debug": true    
}

Starten Sie dann den Daemon neu. Beispiel für Ubuntu 14.04:

sudo service docker restart

Weitere Informationen finden Sie in der Dokumentation zu Docker.

  • Die Protokolle können je nach System an verschiedenen Speicherorten generiert werden. Unter Ubuntu 14.04 ist dies z.B. /var/log/upstart/docker.log.
    Weitere Informationen finden Sie in der Dokumentation zu Docker.

  • Für Docker für Windows werden die Protokolle unter %LOCALAPPDATA%/docker/ generiert. Möglicherweise sind jedoch noch nicht alle Debuginformationen enthalten.

    Um auf das vollständige Daemon-Protokoll zugreifen zu können, müssen Sie ggf. einige zusätzliche Schritte durchführen:

    docker run --privileged -it --rm -v /var/run/docker.sock:/var/run/docker.sock -v /usr/local/bin/docker:/usr/local/bin/docker alpine sh
    
    docker run --net=host --ipc=host --uts=host --pid=host -it --security-opt=seccomp=unconfined --privileged --rm -v /:/host alpine /bin/sh
    chroot /host
    

    Jetzt haben Sie Zugriff auf alle Dateien der VM, auf der dockerd ausgeführt wird. Das Protokoll befindet sich in /var/log/docker.log.

Neue Benutzerberechtigungen gelten nach Aktualisierung möglicherweise nicht sofort

Wenn Sie einem Dienstprinzipal neue Berechtigungen (neue Rollen) erteilen, wird die Änderung möglicherweise nicht sofort wirksam. Es gibt zwei mögliche Gründe:

  • Microsoft Entra Verzögerung bei der Rollenzuweisung. Normalerweise erfolgt dieser Vorgang schnell, kann aber aufgrund einer Weitergabeverzögerung einige Minuten dauern.

  • Berechtigungsverzögerung auf ACR-Tokenserver. Diese kann bis zu 10 Minuten dauern. Um Abhilfe zu schaffen, können Sie docker logout ausführen und sich dann nach einer Minute wieder mit dem gleichen Benutzer authentifizieren:

    docker logout myregistry.azsacr.<regionname>.<fqdn>
    docker login myregistry.azsacr.<regionname>.<fqdn>
    

Authentifizierungsinformationen sind für direkte Aufrufe der REST-API nicht im ordnungsgemäßen Format angegeben

Sie können auf den Fehler InvalidAuthenticationInfo stoßen, insbesondere wenn Sie das curl-Tool mit der Option -L, --location verwenden (um Umleitungen zu folgen). Das Abrufen des Blobs mithilfe von curl mit der Option -L und der Standardauthentifizierung:

curl -L -H "Authorization: basic $credential" https://$registry.azurecr.io/v2/$repository/blobs/$digest

kann z.B. zur folgenden Antwort führen:

<?xml version="1.0" encoding="utf-8"?>
<Error><Code>InvalidAuthenticationInfo</Code><Message>Authentication information is not given in the correct format. Check the value of Authorization header.
RequestId:00000000-0000-0000-0000-000000000000
Time:2019-01-01T00:00:00.0000000Z</Message></Error>

Die eigentliche Ursache ist, dass einige Implementierungen von curl auf Umleitungen mit Headern aus der ursprünglichen Anforderung folgen.

Um das Problem zu beheben, müssen Sie Umleitungen manuell ohne die Header folgen. Geben Sie die Antwortheader mit der Option -D - von curl aus, und extrahieren Sie dann den Header Location:

redirect_url=$(curl -s -D - -H "Authorization: basic $credential" https://$registry.azurecr.io/v2/$repository/blobs/$digest | grep "^Location: " | cut -d " " -f2 | tr -d '\r')
curl $redirect_url

Warum werden im Azure Stack Hub-Portal nicht alle meine Repositorys oder Tags angezeigt?

Wenn Sie Microsoft Edge oder Internet Explorer als Browser verwenden, werden maximal 100 Repositorys oder Tags angezeigt. Wenn Ihre Registrierung mehr als 100 Repositorys oder Tags enthält, empfehlen wir Ihnen, entweder Firefox oder Chrome als Browser zu verwenden, um alle aufzulisten.

Warum kann das Azure Stack Hub-Portal keine Repositorys oder Tags abrufen?

Der Browser ist möglicherweise nicht in der Lage, die Anforderung zum Abrufen von Repositorys oder Tags an den Server zu senden. Dies könnte verschiedene Ursachen haben, z. B.:

  • Fehlende Netzwerkverbindung
  • Firewall
  • Verwenden des Portals aus einem öffentlichen Netzwerk für eine Registrierung, die nur privaten Zugriff zulässt
  • Werbeblocker
  • DNS-Fehler

Wenden Sie sich an Ihren Netzwerkadministrator, oder überprüfen Sie Ihre Netzwerkkonfiguration und -verbindungen. Führen Sie az acr check-health -n yourRegistry mithilfe Ihrer Azure CLI aus, um zu überprüfen, ob Ihre Umgebung eine Verbindung mit Container Registry herstellen kann. Außerdem könnten Sie es mit einer Inkognito- bzw. privaten Sitzung in Ihrem Browser probieren, um veraltete Browsercaches oder -cookies zu vermeiden.

Warum schlägt meine Pull- oder Pushanforderung mit einem unzulässigen Vorgang fehl?

Hier finden Sie einige Szenarios, bei denen Vorgänge möglicherweise nicht zulässig sind:

  • Das Image oder Repository ist möglicherweise gesperrt, sodass es nicht gelöscht oder aktualisiert werden kann. Sie können den Befehl az acr show repository verwenden, um aktuelle Attribute anzuzeigen.
  • Einige Vorgänge sind nicht zulässig, wenn das Image in Quarantäne gestellt wird. Weitere Informationen zur Quarantäne finden Sie hier.
  • Möglicherweise hat Ihre Registrierung das Speicherlimit erreicht.

Repositoryformat ist ungültig oder wird nicht unterstützt

Wenn Sie beim Angeben eines Repositorynamens in Repositoryvorgängen einen Fehler wie „nicht unterstütztes Repositoryformat“, „ungültiges Format“ oder „die angeforderten Daten sind nicht vorhanden“ sehen, überprüfen Sie die richtige Schreibweise einschließlich Groß- und Kleinschreibung des Namens. Gültige Repositorynamen dürfen nur alphanumerische Kleinbuchstaben, Punkte, Bindestriche, Unterstriche und Schrägstriche enthalten.

Wie erfasse ich HTTP-Ablaufverfolgungen unter Windows?

Voraussetzungen

Windows-Container

Konfigurieren des Docker-Proxys für 127.0.0.1:8888

Linux-Container

Ermitteln Sie die IP-Adresse des virtuellen Switches des virtuellen Docker-Computers:

(Get-NetIPAddress -InterfaceAlias "*Docker*" -AddressFamily IPv4).IPAddress

Konfigurieren Sie den Docker-Proxy für die Ausgabe des vorherigen Befehls und für den Port 8888 (z. B. 10.0.75.1:8888).

Nächste Schritte