Importieren von Containerimages in eine Containerregistrierung

Sie können Containerimages ganz einfach in eine Azure Containerregistrierung importieren (kopieren), ohne Docker-Befehle zu verwenden. Sie können z. B. Bilder aus einer Entwicklungsregistrierung in eine Produktionsregistrierung importieren oder Basisimages aus einer öffentlichen Registrierung kopieren.

Azure Container Registry ermöglicht viele allgemeine Szenarien zum Kopieren von Images und anderer Artefakte aus einer vorhandenen Registrierung:

  • Importieren von Bildern aus einer öffentlichen Registrierung.

  • Importieren Sie Images oder OCI-Artefakte, einschließlich Helm 3-Charts, aus einer anderen Azure Container Registry innerhalb desselben Azure-Abonnements, Azure-Mandanten oder über Abonnements und Mandanten hinweg.

  • Importieren sie Bilder aus einer Nicht-Azure privaten Containerregistrierung.

Das Importieren von Images in eine Azure-Containerregistrierung hat die folgenden Vorteile gegenüber der Verwendung von Docker CLI-Befehlen:

  • Wenn Ihre Clientumgebung keine lokale Docker-Installation benötigt, können Sie ein beliebiges Containerimage importieren, unabhängig vom unterstützten Betriebssystemtyp.

  • Wenn Sie Images mit mehreren Architekturen (etwa offizielle Docker-Images) importieren, werden Images für alle Architekturen und Plattformen kopiert, die in der Manifestliste angegeben sind.

  • Wenn Sie Zugriff auf die Zielregistrierung haben, benötigen Sie den öffentlichen Endpunkt der Registrierung nicht.

Wichtig

Für das Importieren von Bildern ist eine externe Registrierungsunterstützung für RFC 7233 erforderlich. Um Fehler zu vermeiden, verwenden Sie eine Registrierung, die RFC 7233-Bereiche unterstützt, während Sie den az acr import Befehl mit dem Registrierungs-URI verwenden.

Einschränkungen

  • Die maximale Anzahl von Manifesten für ein importiertes Image beträgt 50.

  • Azure Container Registry unterstützt das Importieren von Bildern aus einer Vielzahl von Quellregistrierungen über Cloudanbieter hinweg. Wenn es sich bei der Importquelle um ein ACR handelt, können Sie nur aus der Heimatregion der Quell-ACR importieren. Die regionalen Endpunkte der Quell-ACR werden nicht als Importquellen unterstützt. Geben Sie beim Import aus einer Quell-ACR den globalen Endpunkt der Quell-ACR an. Darüber hinaus schreibt ein Import immer Inhalte in die nachgeschaltete ACR-Heimatregion. Siehe Azure Container Registry-Endpunktreferenz.

Führen Sie zum Importieren von Containerimages die Azure CLI in Azure Cloud Shell oder lokal aus.

Hinweis

Azure Container Registry unterstützt darüber hinaus die Georeplikation, falls Sie identische Containerimages auf mehrere Azure-Regionen verteilen müssen. Durch die Georeplikation einer Registrierung (Premium-Dienstebene erforderlich) können Sie in mehreren Regionen identische Image- und Tagnamen aus einer einzelnen Registrierung bereitstellen.

Wichtig

Zum Importieren in oder aus einer netzwerkbeschränkten Azure Containerregistrierung muss die eingeschränkte Registrierung den Zugriff durch vertrauenswürdige Dienste zulassen, um das Netzwerk zu umgehen. Standardmäßig ist die Einstellung aktiviert, sodass der Import funktioniert. Wenn Sie eine Registrierung mit einem privaten Endpunkt oder mit Registrierungsfirewallregeln erstellen und die Einstellung nicht aktivieren, schlägt der Import fehl.

Voraussetzungen

Wenn Sie nicht bereits über eine Azure-Containerregistrierung verfügen, erstellen Sie eine Registrierung. Die hierzu erforderlichen Schritte finden Sie unter Schnellstart: Erstellen einer privaten Containerregistrierung mit der Azure CLI.

Um ein Image in eine Azure-Containerregistrierung zu importieren, muss Ihre Identität über Berechtigungen zum Auslösen von Importen in der Zielregistrierung verfügen (Container Registry Data Importer and Data Reader Rolle). Siehe Übersicht über Azure Container Registry Entra-Berechtigungen und -Rollen.

Importieren von Containerimages aus einer öffentlichen Registrierung

Wichtig

Um aus einer öffentlichen Registrierung in eine netzwerkbeschränkte Azure Containerregistrierung zu importieren, muss die eingeschränkte Registrierung den Zugriff durch vertrauenswürdige Dienste zulassen, um das Netzwerk zu umgehen. Diese Einstellung ist standardmäßig aktiviert, sodass der Import funktioniert. Wenn Sie diese Einstellung in einer neu erstellten Registrierung mit einem privaten Endpunkt oder mit Registrierungsfirewallregeln deaktivieren, schlägt der Import fehl.

Importieren von Containerimages aus Docker Hub

Verwenden Sie beispielsweise den Befehl az acr import, um das Image hello-world:latest mit mehreren Architekturen aus Docker Hub in eine Registrierung namens myregistry zu importieren. hello-world ist ein offizielles Image von Docker Hub und befindet sich daher im library-Standardrepository. Fügen Sie den Repositorynamen und optional ein Tag in den Wert des Imageparameters --source ein. (Optional können Sie ein Image anhand seines Manifest-Digest anstelle seines Tags bestimmen. Damit wird eine bestimmte Version eines Images garantiert.)

az acr import \
  --name myregistry \
  --source docker.io/library/hello-world:latest \
  --image hello-world:latest

Sie können überprüfen, ob mehrere Manifeste mit diesem Image verbunden sind, indem Sie den Befehl az acr manifest list-metadata ausführen:

az acr manifest list-metadata \
  --name hello-world \
  --registry myregistry

So importieren Sie ein Artefakte nach Digest ohne Hinzufügen eines Tags

az acr import \
   --name myregistry \
   --source docker.io/library/hello-world@sha256:abc123 \
   --repository hello-world

Wenn Sie über ein Docker Hub-Konto verfügen, verwenden Sie beim Importieren eines Bilds aus Docker Hub die Anmeldeinformationen. Übergeben Sie den Docker Hub-Benutzernamen mit dem zugehörigen Kennwort oder ein persönliches Zugriffstoken als Parameter an az acr import. Im folgenden Beispiel wird ein öffentliches Image aus dem Repository tensorflow mithilfe von Docker Hub-Anmeldeinformationen in Docker Hub importiert:

az acr import \
  --name myregistry \
  --source docker.io/tensorflow/tensorflow:latest-gpu \
  --image tensorflow:latest-gpu \
  --username <Docker Hub user name> \
  --password <Docker Hub token>

Container-Images aus Microsoft Container Registry importieren

Importieren Sie beispielsweise das Windows Server Core-Image ltsc2022 aus dem Repository windows in die Microsoft Container Registry.

az acr import \
--name myregistry \
--source mcr.microsoft.com/windows/servercore:ltsc2022\
--image servercore:ltsc2022

Importieren von Containerimages aus einer Azure-Containerregistrierung im selben Microsoft Entra Mandanten

Sie können ein Image aus einer Azure Containerregistrierung im selben Microsoft Entra Mandanten importieren, indem Sie integrierte Microsoft Entra Berechtigungen verwenden.

  • Ihre Identität muss über Berechtigungen zum Anzeigen und Abrufen von Bildern, Tags und OCI-Referrern aus der Quellregistrierung verfügen (Container Registry Data Importer and Data Reader-Rolle für die Quellregistrierung).

  • Ihre Identität muss auch über Berechtigungen zum Lesen von Images und zum Auslösen von Importen in der Zielregistrierung (Container Registry Data Importer and Data Reader-Rolle für die Zielregistrierung) verfügen.

  • Die Registrierung kann sich in demselben oder einem anderen Azure Abonnement im selben Microsoft Entra Mandanten befinden.

  • Der öffentliche Zugriff auf die Quellregistrierung ist deaktiviert. Wenn der öffentliche Zugriff deaktiviert ist, geben Sie die Quellregistrierung nach Ressourcen-ID anstelle des Servernamens der Registrierungsanmeldung an.

  • Die Quell- oder Zielregistrierung mit einem privaten Endpunkt oder Registrierungsfirewallregeln muss die eingeschränkte Registrierung den Zugriff auf das Netzwerk für vertrauenswürdige Dienste zulassen.

Importieren von Containerimages aus einer Registrierung im selben Abonnement

Importieren Sie beispielsweise das Image aci-helloworld:latest aus der Quellregistrierung mysourceregistry in myregistry im gleichen Azure-Abonnement.

Das folgende Beispiel importiert das aci-helloworld:latest-Image in myregistry aus einer Quellregistrierung mysourceregistry, in der der Zugriff auf den öffentlichen Endpunkt der Registrierung deaktiviert ist. Geben Sie die Ressourcen-ID der Quellregistrierung mit dem Parameter --registry an. Beachten Sie, dass der Parameter --source nur das Quellrepository und Tag, aber nicht den Namen des Anmeldeservers für die Registrierung angibt.

Um die Microsoft Entra-Identitätsauthentifizierung bei der Quellregistrierung zu verwenden, geben Sie das Flag --registry <source-registry-resource-id> an.

az acr import \
  --name myregistry \
  --source aci-helloworld:latest \
  --image aci-helloworld:latest \
  --registry /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/sourceResourceGroup/providers/Microsoft.ContainerRegistry/registries/mysourceregistry

Container-Images aus einer Containerregistrierung in einem anderen Abonnement importieren

Hinweis

Um ein Image aus einer Registrierung in eine andere zu importieren, müssen die Quell- und Zielregistrierungen sicherstellen, dass beide Regionen für die Azure Container Registry (ACR) unter den Ressourcenanbietern des Abonnements registriert sind.

Im folgenden Beispiel befindet sich mysourceregistry in einem anderen Abonnement als myregistry im selben Mandanten. Geben Sie die Ressourcen-ID der Quellregistrierung mithilfe des --registry Parameters an. Der --source Parameter gibt nur das Quell-Repository und das Tag an, nicht den Namen des Registrierungsanmeldungsservers.

az acr import \
  --name myregistry \
  --source aci-helloworld:latest \
  --image aci-hello-world:latest \
  --registry /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/sourceResourceGroup/providers/Microsoft.ContainerRegistry/registries/mysourceregistry

Importieren Sie Container-Images aus einer Registry mithilfe der Anmeldeinformationen eines Dienstprinzipals

Sie können für den Import aus einer Registrierung, auf die Sie nicht mit integrierten Active Directory-Berechtigungen zugreifen, Anmeldeinformationen für einen Dienstprinzipal für die Quellregistrierung verwenden (sofern verfügbar). Geben Sie die AppID und das Kennwort eines Microsoft Entra Dienstprinzipals ein, der über den richtigen Rollenzuweisungszugriff auf die Quellregistrierung verfügt.

  • Stellen Sie für Microsoft Entra Dienstprinzipale sicher, dass entweder Container Registry Repository Reader (für ABAC-fähige Registrierungen) oder AcrPull (für Nicht-ABAC-Registrierungen) zugewiesen ist.

Die Verwendung eines Dienstprinzipals empfiehlt sich für Buildsysteme und andere unbeaufsichtigte Systeme, die Images in Ihre Registrierung importieren müssen.

az acr import \
  --name myregistry \
  --source sourceregistry.azurecr.io/sourcerepo:tag \
  --image targetimage:tag \
  --username <SP_App_ID> \
  --password <SP_Passwd>

Containerimages aus einer Azure-Containerregistrierung in einem anderen Mandanten importieren

Wenn Sie Bilder aus einer Azure Containerregistrierung in einem anderen Microsoft Entra Mandanten importieren möchten, geben Sie die Quellregistrierung anhand des Anmeldeservernamens an, und geben Sie Anmeldeinformationen an, die den Pullzugriff auf die Registrierung ermöglichen.

Mandantenübergreifender Import wird für eine Registry mit deaktiviertem öffentlichem Zugriff nicht unterstützt.

Mandantenübergreifender Import mit Benutzername und Kennwort

Verwenden Sie z. B. ein Token, das nicht auf ein Microsoft Entra-Repository bezogen ist, und ein entsprechendes Kennwort, oder die App-ID und das Kennwort eines Microsoft Entra-Dienstprinzipals, der korrekte Rollenzuweisungen für die Quellregistrierung enthält.

  • Stellen Sie für Microsoft Entra Dienstprinzipale sicher, dass entweder Container Registry Repository Reader (für ABAC-fähige Registrierungen) oder AcrPull (für Nicht-ABAC-Registrierungen) in der Quellregistrierung zugewiesen ist.
az acr import \
  --name myregistry \
  --source sourceregistry.azurecr.io/sourcerepo:tag \
  --image targetimage:tag \
  --username <SP_App_ID> \
  --password <SP_Passwd>

Mandantenübergreifender Import mit Zugriffstoken

Um mithilfe einer Identität im Quellmandanten, die über Registrierungsberechtigungen verfügt, auf die Quellregistrierung zuzugreifen, können Sie ein Zugriffstoken abrufen:

# Login to Azure CLI with the identity, for example a user-assigned managed identity
az login --identity --username <identity_ID>

# Get access token returned by `az account get-access-token`
az account get-access-token

Übergeben Sie im Zielmandanten das Zugriffstoken als Kennwort an den Befehl az acr import. Die Quellregistrierung gibt den Anmeldeservernamen an. In diesem Befehl ist kein Benutzername erforderlich:

az acr import \
  --name myregistry \
  --source sourceregistry.azurecr.io/sourcerepo:tag \
  --image targetimage:tag \
  --password ($token|ConvertFrom-Json).accessToken

Containerimages aus einer privaten Containerregistrierung außerhalb von Azure importieren

Importieren Sie ein Image aus einer privaten Registrierung außerhalb von Azure, indem Sie Anmeldeinformationen angeben, die den Pullzugriff auf die Registrierung ermöglichen. Rufen Sie beispielsweise ein Image per Pull aus einer privaten Docker-Registrierung ab:

az acr import \
  --name myregistry \
  --source docker.io/sourcerepo/sourceimage:tag \
  --image sourceimage:tag \
  --username <username> \
  --password <password>

Beheben von Problemen beim Import von Containerimages

Wenn beim Importieren eines Bilds ein Fehler angezeigt wird, lesen Sie die folgende Tabelle, um weitere Informationen zu finden.

Fehlermeldung Explanation
The remote server may not be RFC 7233 compliant Die Verteilungsspezifikation ermöglicht die Bereichskopfform Range: bytes=<start>-<end>. Der Remoteserver ist jedoch möglicherweise nicht RFC 7233-kompatibel.
Unexpected response status code Beim Ausführen der Bereichsabfrage wurde ein unerwarteter Antwortstatuscode aus dem Quell-Repository abgerufen.
Unexpected length of body in response Die Länge des empfangenen Inhalts stimmt nicht mit der erwarteten Größe überein. Die erwartete Größe wird durch die Blob-Größe und den Range-Header bestimmt.

Nächste Schritte

In diesem Artikel haben Sie erfahren, wie Sie Containerimages aus einer öffentlichen Registrierung oder einer anderen privaten Registrierung in eine Azure-Containerregistrierung importieren.