An Azure service that provides a registry of Docker and Open Container Initiative images.
- Yes, there are additional factors that can explain a mismatch between the sum of manifest sizes and the reported Used storage:
- Shared layers across manifests: ACR stores layers only once even if multiple manifests reference them. Deleting a manifest only frees the layers that are no longer referenced by any other manifest. If older or other images still reference those layers, storage usage will not drop as much as expected. This behavior is described for delete operations where “layers that are referenced by multiple different manifests are stored only one time,” and deleting one image only removes layers that are unique to that image.
- Untagged/orphaned manifests: Repeatedly pushing modified artifacts with the same tags can create untagged artifacts whose layers still occupy space. These untagged images do not appear when listing by tag, but their layers remain until the last referencing manifest is deleted. Deleting such untagged images frees space only when their layers are not shared with other manifests.
- Non‑image artifacts and many repositories/tags: ACR storage includes all repositories, images, layers, tags, and artifacts up to the registry storage limit. High numbers of repositories and tags can increase storage and affect performance, even if only a small subset is actively used.
- For a more detailed breakdown of storage consumption, ACR exposes only coarse-grained usage information:
- Use
az acr show-usage -n <registry>to get a snapshot of storage consumed in bytes and other usage metrics for the registry’s SKU. This shows total storage but not per-repository or per-layer breakdown. - At the repository level,
az acr manifest list-metadatacan be used to list manifests and their sizes, and you can script deletions of untagged manifests (for example, by querying for manifests wheretags[0]==nulland deleting them). However, ACR does not expose a built-in per-layer or per-repository storage accounting API beyond manifest sizes.
- Use
- ACR storage usage updates and temporary discrepancies:
- Storage usage is tied to the underlying blobs (layers) referenced by manifests. When images with no shared layers are deleted, the registry usage should update within a few minutes.
- The portal’s Used storage value and
az acr show-usageprovide a snapshot and might not reflect all recent operations immediately. Documentation notes that registry storage usage might lag and recommends monitoring theStorageUsedmetric for more up-to-date data. - In scenarios where images share layers, deleting some manifests will not reduce storage as much as expected because shared layers remain until all referencing manifests are deleted.
To troubleshoot discrepancies:
- List manifests per repository and identify untagged ones (orphans) using
az acr manifest list-metadataand delete them if they are no longer needed. - After deleting images that are known not to share layers (for example, by creating a test image with a unique 1 GB layer, pushing it, then deleting it), verify that storage usage changes using
az acr show-usageand the portal. This pattern is documented as a way to validate storage quota changes.
References:
- Frequently asked questions - Azure Container Registry
- Troubleshoot Azure Container Registry delete operation issues
- Frequently asked questions - Azure Container Registry on Azure Stack Hub
- Container image storage in Azure Container Registry
- About registries, repositories, and artifacts
- Azure Container Registry SKU features and limits