Generated banner for Azure Container Registry CLI
Generated logo for Azure Container Registry CLI

Azure Container Registry CLI

GitHubOfficialFirst committed by AClerboisDistributed by GitHub

  • Skill
  • Tool integration
  • Cloud and DevOps
  • MIT
  • Low risk

From the author

Manage Azure Container Registry via the az acr CLI including registries, images, cloud builds, ACR Tasks, authentication, tokens, geo-replication, and networking. Use when working with ACR, az acr commands, pushing/importing/purging container images in Azure, or when the user mentions Azure Container Registry.
— the description by AClerbois

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

The azure-container-registry-cli skill provides a comprehensive interface for interacting with Azure Container Registry (ACR) via the Azure CLI. It covers the full lifecycle of container registries, including creation, authentication, image management, cloud-based builds, and automated tasks. The skill emphasizes server-side operations like importing images and cloud builds to reduce local dependencies and improve efficiency in CI/CD pipelines.

What it does

  • Create and manage Azure Container Registry instances and configurations.
  • Authenticate local environments or services against registries.
  • Execute cloud-based container image builds without requiring a local daemon.
  • Automate image workflows using ACR Tasks with git, base-image, or timer triggers.
  • Perform server-side image operations such as importing and purging.
  • Manage registry security through RBAC roles, repository-scoped tokens, and network rules.

When to use it

  • When you need to build, push, or import container images directly within Azure.
  • When setting up automated image rebuilds or multi-step tasks.
  • When configuring registry access for CI/CD systems or Azure compute services.
  • When managing registry lifecycle, geo-replication, or network security settings.
  • When diagnosing connectivity or quota issues with a registry.

Advantages

  • Reduces local resource usage by offloading builds and image transfers to the cloud.
  • Integrates natively with Azure identity and access management systems.
  • Supports complex automation workflows through ACR Tasks.
  • Provides server-side tools for efficient image maintenance and cleanup.

Usage examples

“How do I build an image in the cloud using my current directory?”
The agent will provide the az acr build command, specifying the registry and image name to trigger a cloud-based build.
“How can I grant a service principal pull access to my registry?”
The agent will explain how to use az role assignment create with the AcrPull role scoped to the registry ID.
“Show me how to list all tags for a specific repository.”
The agent will provide the az acr repository show-tags command to display tags for the requested repository.
“How do I set up a nightly rebuild task for my application?”
The agent will guide you through creating an ACR task and adding a timer trigger using az acr task timer add.

Install

  1. Download the skill as a ZIP:

    https://mp-staging.autogineer.com/agent-skills/github/azure-container-registry-cli/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip azure-container-registry-cli.zip -d .agents/skills

Documentation by AClerbois

Azure Container Registry CLI

Manage Azure Container Registry (ACR) resources using the az acr command group of the Azure CLI.

CLI: az acr ships with core Azure CLI — no extension required (the acrtransfer extension is only needed for export/import pipelines).

Prerequisites

# Install Azure CLI
brew install azure-cli  # macOS
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash  # Linux
winget install Microsoft.AzureCLI  # Windows

# Sign in and select subscription
az login
az account set --subscription {subscription-id}

Quick Start

# Create a registry (SKU: Basic | Standard | Premium)
az acr create --resource-group {rg} --name {registry} --sku Standard

# Authenticate Docker/Podman against the registry
az acr login --name {registry}

# Build and push in the cloud — no local Docker needed
az acr build --registry {registry} --image app:v1 .

# Copy an image from another registry without pull/push
az acr import --name {registry} --source mcr.microsoft.com/hello-world:latest

# List repositories and tags
az acr repository list --name {registry} --output table
az acr repository show-tags --name {registry} --repository app --orderby time_desc

# Diagnose registry connectivity and configuration
az acr check-health --name {registry} --yes

Key Principles

  • Prefer az acr build / ACR Tasks over local docker build + docker push: builds run in Azure, work without a local daemon, and integrate with triggers.

  • Prefer az acr import to move images between registries: it is server-side, faster, and requires no local storage.

  • Never enable the admin user for production — use Microsoft Entra identities (RBAC roles AcrPull/AcrPush, or Container Registry Repository Reader/Writer on ABAC-enabled registries), repository-scoped tokens, or managed identities.

  • Premium-only features: geo-replication, private endpoints, retention policies, connected registries, agent pools. (Repository-scoped tokens work in all tiers; zone redundancy is automatic in all tiers in supported regions.)

CLI Structure

az acr
├── create / delete / list / show / update   # Registry lifecycle
├── login                  # Docker credential helper (or --expose-token)
├── check-health / check-name / show-usage   # Diagnostics & quota
├── build                  # Cloud image build (quick task)
├── run                    # Run a command / multi-step task once
├── task                   # ACR Tasks (triggers, timers, logs, runs)
├── agentpool              # Dedicated task agent pools (Premium)
├── import                 # Server-side image copy into the registry
├── repository             # List/show/delete/untag repos & tags, lock images
├── manifest               # Manifest metadata, delete, OCI referrers
├── credential             # Admin user credentials (avoid in production)
├── token / scope-map      # Repository-scoped tokens (Premium)
├── replication            # Geo-replication (Premium)
├── network-rule           # IP network rules
├── private-endpoint-connection  # Private Link approvals
├── config                 # content-trust, retention, soft-delete, ...
├── cache / credential-set # Artifact cache (pull-through cache) rules
├── webhook                # Push/delete event webhooks
├── connected-registry     # On-premises / IoT connected registries
└── export-pipeline / import-pipeline / pipeline-run  # acrtransfer extension

Reference Files

Read the relevant reference file based on the user's task. Each file contains complete command syntax and examples for its domain.

FileWhen to readCovers
references/auth-and-security.mdLogin failures, permissions, CI/CD or AKS pull accessaz acr login (incl. --expose-token), Entra RBAC roles, service principals, managed identities, --attach-acr for AKS, repository-scoped tokens & scope maps, admin user, content trust
references/build-and-tasks.mdBuilding images in Azure, automation, CI triggersaz acr build, az acr run, multi-step task YAML, az acr task (git/base-image/timer triggers, logs, runs), agent pools
references/images-and-artifacts.mdManaging repos, tags, cleanup, storage costsaz acr import, repository & manifest commands, untag vs delete, purge (acr purge), image locking, retention policy, soft delete, artifact cache, show-usage
references/networking-and-geo.mdMulti-region, private access, edge scenariosGeo-replication, zone redundancy, private endpoints, network rules, dedicated data endpoints, connected registries, registry transfer pipelines

Files

references/auth-and-security.md

Authentication & Security

Table of Contents

  • Individual Login

  • Microsoft Entra RBAC Roles

  • Service Principals

  • Managed Identities

  • AKS Integration

  • Repository-Scoped Tokens

  • Admin User

  • Content Trust


Individual Login

# Standard login — wires Docker/Podman credentials via your az login identity
az acr login --name {registry}

# Without a Docker daemon: get an Entra access token and pipe it to docker login
LOGIN_SERVER=$(az acr show --name {registry} --query loginServer --output tsv)
az acr login --name {registry} --expose-token --query accessToken --output tsv | \
  docker login $LOGIN_SERVER --username 00000000-0000-0000-0000-000000000000 --password-stdin

Notes:

  • az acr login tokens are valid for 3 hours; re-run on expiry.

  • Resolve the login server with az acr show --name {registry} --query loginServer --output tsv rather than hardcoding it: it is usually {registry}.azurecr.io, but sovereign clouds use other suffixes and registries with a domain name label scope get a hash suffix.

Microsoft Entra RBAC Roles

The applicable data-plane roles depend on the registry's role assignment permissions mode — check it first:

az acr show --name {registry} --query roleAssignmentMode --output tsv
# LegacyRegistryPermissions  -> use AcrPull/AcrPush/AcrDelete
# AbacRepositoryPermissions  -> use Container Registry Repository Reader/Writer/Contributor

Legacy mode (RBAC Registry Permissions):

RolePermissions
AcrPullPull images
AcrPushPull + push images
AcrDeleteDelete images
AcrImageSignerSign images (content trust)
Contributor/OwnerFull control-plane management + push/pull

ABAC-enabled mode (RBAC Registry + ABAC Repository Permissions): AcrPull/AcrPush/AcrDelete are not honored, and Owner/Contributor/Reader grant control-plane only. Use instead:

RolePermissions
Container Registry Repository ReaderRead images, tags, metadata (add ABAC conditions to scope to repositories)
Container Registry Repository WriterRead + write/update
Container Registry Repository ContributorRead + write + delete
Container Registry Repository Catalog ListerList repositories — assign only when the identity must enumerate the catalog (e.g., az acr repository list); not needed for pull/push of known repositories
# Get the registry resource ID
ACR_ID=$(az acr show --name {registry} --query id --output tsv)

# Grant pull access to a user, group, service principal, or managed identity
az role assignment create --assignee {principal-id} --scope $ACR_ID --role AcrPull

# List who has access
az role assignment list --scope $ACR_ID --output table

Service Principals

For CI/CD systems that cannot use OIDC/managed identity:

# Create an SP scoped to pull only
ACR_ID=$(az acr show --name {registry} --query id --output tsv)
az ad sp create-for-rbac --name {sp-name} --scopes $ACR_ID --role AcrPull

# Docker login with the SP — pipe the secret via stdin, never pass it as an argument
# (printf with a quoted variable preserves whitespace/glob characters exactly)
printf '%s' "$SP_PASSWORD" | docker login $LOGIN_SERVER --username {appId} --password-stdin

Prefer federated credentials (OIDC) over SP passwords in GitHub Actions / Azure DevOps when possible.

Managed Identities

For Azure compute (VM, App Service, Container Apps, Functions):

# Assign a system-assigned identity and grant it pull
az vm identity assign --name {vm} --resource-group {rg}
PRINCIPAL_ID=$(az vm show --name {vm} --resource-group {rg} --query identity.principalId --output tsv)
az role assignment create --assignee $PRINCIPAL_ID --scope $ACR_ID --role AcrPull

App Service / Container Apps then pull with --assign-identity + --acr-identity style flags of their own CLIs — no registry password needed.

AKS Integration

# Attach at cluster creation
az aks create --name {cluster} --resource-group {rg} --attach-acr {registry}

# Attach/detach an existing cluster (grants AcrPull to the kubelet identity)
az aks update --name {cluster} --resource-group {rg} --attach-acr {registry}
az aks update --name {cluster} --resource-group {rg} --detach-acr {registry}

# Validate the cluster can reach the registry
az aks check-acr --name {cluster} --resource-group {rg} --acr {registry}.azurecr.io

--attach-acr requires Owner or User Access Administrator on the registry. Cross-subscription attach works by passing the full ACR resource ID.

⚠️ --attach-acr assigns AcrPull, which is not honored on ABAC-enabled registries (roleAssignmentMode = AbacRepositoryPermissions). For those, assign the ABAC roles to the kubelet identity manually:

ACR_ID=$(az acr show --name {registry} --query id --output tsv)
KUBELET_ID=$(az aks show --name {cluster} --resource-group {rg} \
  --query identityProfile.kubeletidentity.objectId --output tsv)
az role assignment create --assignee $KUBELET_ID --scope $ACR_ID \
  --role "Container Registry Repository Reader"
# "Container Registry Repository Catalog Lister" is NOT needed for pulls —
# only add it if the identity must list repositories

Repository-Scoped Tokens

Available in all service tiers. Fine-grained, non-Entra credentials (e.g., external partners, IoT devices):

# 1. Create a scope map (actions: content/read, content/write, content/delete, metadata/read, metadata/write)
az acr scope-map create --name {scope-map} --registry {registry} \
  --repository app content/read metadata/read \
  --description "Pull-only access to app"

# 2. Create a token bound to the scope map
az acr token create --name {token} --registry {registry} --scope-map {scope-map}

# 3. Generate/rotate passwords (up to 2, optional expiry)
az acr token credential generate --name {token} --registry {registry} --password1 --expiration-in-days 30

# Login with the token — pipe the password via stdin, never pass it as an argument
printf '%s' "$TOKEN_PWD" | docker login $LOGIN_SERVER --username {token} --password-stdin

# Disable or delete
az acr token update --name {token} --registry {registry} --status disabled
az acr token delete --name {token} --registry {registry} --yes

Admin User

Single account, full push/pull on the whole registry, not auditable per user — keep disabled in production:

az acr update --name {registry} --admin-enabled false   # recommended
az acr credential show --name {registry}                # view username/passwords (if enabled)
az acr credential renew --name {registry} --password-name password2   # rotate

Legitimate uses: quick local tests, services that only accept username/password and cannot use tokens.

Content Trust (deprecated)

Docker Content Trust (DCT) is being retired: since May 31, 2026 it cannot be enabled on new registries (or on registries that never enabled it), and it will be removed entirely on March 31, 2028. Do not set up DCT — sign images with Notation (Notary Project) and store signatures as OCI artifacts instead; see "Transition from Docker Content Trust to Notary Project" in the ACR docs.

# Registries with legacy DCT only — inspect or disable the existing configuration
az acr config content-trust show --registry {registry}
az acr config content-trust update --registry {registry} --status disabled

Legacy DCT signers needed AcrImageSigner in addition to AcrPush.

Requirements and compatibility

Written for: GitHub Copilot

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Needs: Needs network access, Needs a command-line tool

Security

What our scanner noticed· Low risk

  • Instructions that use the network

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

First committed by
GitHub avatar of AClerboisAClerbois
Publisher
GitHub (Official)
Distributed by
GitHub
Source
github/awesome-copilot · skills/azure-container-registry-cli · commit 797337f
Licence
MIT License (redistribution allowed)
  • LICENSE (added by AutoGineer from LICENSE)
  • ATTRIBUTION.md (written by AutoGineer)
Synced
Contributors
AClerbois

AutoGineer is not affiliated with or endorsed by AClerbois or GitHub.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download azure-container-registry-cli.zip