You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自动化从azurecr.io拉取Docker镜像及容器运行(含身份验证)?

解决Azure容器注册表(ACR)镜像自动化拉取/运行的登录问题

方案1:使用Azure服务主体(Service Principal)实现非交互式登录

这是适用于本地或非Azure环境工作站的通用方案:

  1. 创建服务主体并分配ACR权限
    在Azure上创建一个服务主体,为其分配ACR的镜像拉取权限(AcrPull角色):

    az ad sp create-for-rbac --name acr-pull-sp --scopes /subscriptions/<你的订阅ID>/resourceGroups/<资源组名>/providers/Microsoft.ContainerRegistry/registries/<你的ACR名称> --role AcrPull
    

    执行后会返回包含appId、password、tenant的JSON结果,请妥善保存这三个值。

  2. 在工作站配置非交互式登录
    两种可选方式:

    • 方式一:通过Azure CLI登录(自动同步Docker凭证)
      az login --service-principal -u <appId> -p <password> --tenant <tenant>
      
    • 方式二:直接给Docker配置ACR登录凭证
      docker login my_registry.azurecr.io -u <appId> -p <password>
      

    凭证会被Docker保存,有效期内无需重复登录,也可定时执行命令刷新。

  3. 集成到自动化脚本
    将命令写入shell脚本,通过cron定时执行:

    #!/bin/bash
    # 服务主体登录Docker
    docker login my_registry.azurecr.io -u <你的appId> -p <你的password>
    # 拉取最新镜像
    docker pull my_registry.azurecr.io/my_image:latest
    # 清理旧容器(按需)
    docker stop my_container || true
    docker rm my_container || true
    # 启动新容器
    docker run -d --name my_container ... my_registry.azurecr.io/my_image:latest
    

    安全提示:避免明文存储密码,可使用环境变量或Azure Key Vault管理敏感信息。

方案2:使用Azure托管标识(仅适用于Azure虚拟机/规模集)

如果你的工作站是Azure VM,可通过托管标识实现无密码登录:

  1. 为VM启用托管标识

    • 系统分配标识:在Azure门户VM页面的「标识」>「系统分配」中开启并保存。
    • 用户分配标识:先创建用户分配标识,再在VM的「标识」>「用户分配」中添加。
  2. 为标识分配ACR权限

    az role assignment create --assignee <标识的客户端ID/对象ID> --scope /subscriptions/<订阅ID>/resourceGroups/<资源组名>/providers/Microsoft.ContainerRegistry/registries/<ACR名称> --role AcrPull
    
  3. 在VM上配置Docker登录
    通过Azure实例元数据服务获取令牌并登录:

    # 获取ACR访问令牌
    TOKEN=$(curl -s "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fmanagement.azure.com%2F" -H "Metadata: true" | jq -r .access_token)
    # Docker登录ACR
    docker login my_registry.azurecr.io -u 00000000-0000-0000-0000-000000000000 -p $TOKEN
    

    令牌会自动刷新,无需存储任何密码,适合长期自动化场景。

方案3:使用ACR管理员账户(仅测试用)

ACR自带管理员账户,启用后可直接用其凭证登录,但因权限过高、泄露风险大,不建议生产环境使用:

  1. 在Azure门户ACR页面的「访问密钥」中启用「管理员用户」,复制用户名和密码。
  2. 执行登录命令:
    docker login my_registry.azurecr.io -u <管理员用户名> -p <管理员密码>
    

内容的提问来源于stack exchange,提问作者malfonsoarquimea

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 18:22:51