Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
You can easily import (copy) container images to an Azure container registry without using Docker commands. For example, you can import images from a development registry to a production registry, or copy base images from a public registry.
Azure Container Registry handles many common scenarios to copy images and other artifacts from an existing registry:
Import images from a public registry.
Import images or OCI artifacts, including Helm 3 charts, from another Azure container registry in the same Azure subscription, Azure tenant, or across subscriptions and tenants.
Import images from a non-Azure private container registry.
Importing images into an Azure container registry has the following benefits compared to using Docker CLI commands:
If your client environment doesn't need a local Docker installation, you can import any container image, regardless of the supported OS type.
If you import multi-architecture images (such as official Docker images), images for all architectures and platforms specified in the manifest list get copied.
If you have access to the target registry, you don't require the registry's public endpoint.
Important
Importing images requires external registry support RFC 7233. To avoid failures, use a registry that supports RFC 7233 ranges while using the az acr import command with the registry URI.
Limitations
- The maximum number of manifests for an imported image is 50.
To import container images, run the Azure CLI in Azure Cloud Shell or locally.
Note
If you need to distribute identical container images across multiple Azure regions, Azure Container Registry also supports geo-replication. By geo-replicating a registry (Premium service tier required), you can serve multiple regions with identical image and tag names from a single registry.
Important
To import to or from a network-restricted Azure container registry, the restricted registry must allow access by trusted services to bypass the network. By default, the setting is enabled, so import works. If you create a registry with a private endpoint or with registry firewall rules and don't enable the setting, import fails.
Prerequisites
If you don't already have an Azure container registry, create a registry. For steps, see Quickstart: Create a private container registry using the Azure CLI.
To import an image to an Azure Container Registry, your identity must have permissions to trigger imports on the target registry (Container Registry Data Importer and Data Reader role). See Azure Container Registry Entra permissions and roles overview.
Import container images from a public registry
Important
To import from a public registry to a network-restricted Azure container registry, the restricted registry must allow access by trusted services to bypass the network. By default, this setting is enabled, so import works. If you disable this setting in a newly created registry with a private endpoint or with registry firewall rules, import fails.
Import container images from Docker Hub
For example, use the az acr import command to import the multi-architecture hello-world:latest image from Docker Hub to a registry named myregistry. Because hello-world is an official image from Docker Hub, this image is in the default library repository. Include the repository name and optionally a tag in the value of the --source image parameter. (You can optionally identify an image by its manifest digest instead of by tag, which guarantees a particular version of an image.)
az acr import \
--name myregistry \
--source docker.io/library/hello-world:latest \
--image hello-world:latest
You can verify that multiple manifests are associated with this image by running the az acr manifest list-metadata command:
az acr manifest list-metadata \
--name hello-world \
--registry myregistry
To import an artifact by digest without adding a tag:
az acr import \
--name myregistry \
--source docker.io/library/hello-world@sha256:abc123 \
--repository hello-world
If you have a Docker Hub account, use the credentials when importing an image from Docker Hub. Pass the Docker Hub user name and the password or a personal access token as parameters to az acr import. The following example imports a public image from the tensorflow repository in Docker Hub, using Docker Hub credentials:
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>
Import container images from Microsoft Container Registry
For example, import the ltsc2022 Windows Server Core image from the windows repository in Microsoft Container Registry.
az acr import \
--name myregistry \
--source mcr.microsoft.com/windows/servercore:ltsc2022\
--image servercore:ltsc2022
Import container images from an Azure container registry in the same Microsoft Entra tenant
You can import an image from an Azure container registry in the same Microsoft Entra tenant by using integrated Microsoft Entra permissions.
Your identity must have permissions to view and pull images, tags, and OCI referrers from the source registry (
Container Registry Data Importer and Data Readerrole assigned on the source registry).Your identity must also have permissions to both read images and trigger imports on the target registry (
Container Registry Data Importer and Data Readerrole assigned on the target registry).The registry can be in the same or a different Azure subscription in the same Microsoft Entra tenant.
Public access to the source registry is disabled. If public access is disabled, specify the source registry by resource ID instead of by registry login server name.
The source registry and/or the target registry with a private endpoint or registry firewall rules must ensure the restricted registry allows trusted services to access the network.
Import container images from a registry in the same subscription
For example, import the aci-helloworld:latest image from a source registry mysourceregistry to myregistry in the same Azure subscription.
The following example imports the aci-helloworld:latest image to myregistry from a source registry mysourceregistry in which access to the registry's public endpoint is disabled. Supply the resource ID of the source registry with the --registry parameter. Notice that the --source parameter specifies only the source repository and tag, not the registry login server name.
To use Microsoft Entra identity authentication to the source registry, include the --registry <source-registry-resource-id> flag.
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
Import container images from a registry in a different subscription
Note
To import an image from one registry to another, the source and target registries must ensure that both regions are registered for Azure Container Registry (ACR) under the subscription’s resource providers.
In the following example, mysourceregistry is in a different subscription from myregistry in the same tenant. Supply the resource ID of the source registry by using the --registry parameter. The --source parameter specifies only the source repository and tag, not the registry login server name.
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
Import container images from a registry by using service principal credentials
To import from a registry that you can't access by using integrated Active Directory permissions, use service principal credentials (if available) for the source registry. Enter the appID and password of a Microsoft Entra service principal that has the correct role assignment access to the source registry.
- For Microsoft Entra service principals, ensure either
Container Registry Repository Reader(for ABAC-enabled registries) orAcrPull(for non-ABAC registries) is assigned.
Using a service principal is useful for build systems and other unattended systems that need to import images to your registry.
az acr import \
--name myregistry \
--source sourceregistry.azurecr.io/sourcerepo:tag \
--image targetimage:tag \
--username <SP_App_ID> \
--password <SP_Passwd>
Import container images from an Azure container registry in a different tenant
To import images from an Azure container registry in a different Microsoft Entra tenant, specify the source registry by login server name, and provide credentials that enable pull access to the registry.
Cross-tenant import isn't supported over public access disabled registry.
Cross-tenant import with username and password
For example, use a non-Microsoft Entra repository-scoped token and password, or the appID and password of a Microsoft Entra service principal that has correct role assignments to the source registry.
- For Microsoft Entra service principals, ensure either
Container Registry Repository Reader(for ABAC-enabled registries) orAcrPull(for non-ABAC registries) is assigned on the source registry.
az acr import \
--name myregistry \
--source sourceregistry.azurecr.io/sourcerepo:tag \
--image targetimage:tag \
--username <SP_App_ID> \
--password <SP_Passwd>
Cross-tenant import with access token
To access the source registry by using an identity in the source tenant that has registry permissions, get an access token:
# 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
In the target tenant, pass the access token as a password to the az acr import command. The source registry specifies the login server name. No username is needed in this command:
az acr import \
--name myregistry \
--source sourceregistry.azurecr.io/sourcerepo:tag \
--image targetimage:tag \
--password ($token|ConvertFrom-Json).accessToken
Import container images from a non-Azure private container registry
Import an image from a non-Azure private registry by specifying credentials that enable pull access to the registry. For example, pull an image from a private Docker registry:
az acr import \
--name myregistry \
--source docker.io/sourcerepo/sourceimage:tag \
--image sourceimage:tag \
--username <username> \
--password <password>
Troubleshoot problems with container image imports
If you see an error when importing an image, review the following table for more information.
| Error message | Explanation |
|---|---|
The remote server may not be RFC 7233 compliant |
The distribution-spec allows range header form of Range: bytes=<start>-<end>. However, the remote server might not be RFC 7233 compliant. |
Unexpected response status code |
An unexpected response status code was retrieved from the source repository when doing range query. |
Unexpected length of body in response |
The received content length doesn't match the expected size. The expected size is decided by blob size and range header. |
Next steps
In this article, you learned about importing container images to an Azure container registry from a public registry or another private registry.
For additional image import options, see the az acr import or Import-AzContainerRegistryImage reference.
Image import can help you move content to a container registry in a different Azure region, subscription, or Microsoft Entra tenant. For more information, see Manually move a container registry to another region.
Disable artifact export from a network-restricted container registry.