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

如何将AzureCLI凭据传入docker run供容器内DefaultAzureCredential使用?

解决方案

针对你的场景,以下几种方式可让容器内的DefaultAzureCredential完成ARM认证:

方案1:传递AzureCLI任务的服务主体凭据到容器

AzureCLI@2任务执行时会自动使用流水线的服务主体(或托管标识)认证,你可将这些凭据导出为环境变量,再传递给Docker容器,DefaultAzureCredential会自动识别:

YAML配置示例

- task: AzureCLI@2
  displayName: 'Run Docker container with Azure credentials'
  inputs:
    azureSubscription: '<你的服务连接名称>'
    scriptType: 'bash'
    scriptLocation: 'inlineScript'
    inlineScript: |
      # 导出服务主体凭据为环境变量
      export AZURE_CLIENT_ID=$(az account show --query clientId -o tsv)
      export AZURE_TENANT_ID=$(az account show --query tenantId -o tsv)
      export AZURE_CLIENT_SECRET=$(az account get-access-token --query accessToken -o tsv)

      # 运行Docker容器并传递环境变量
      docker run -e AZURE_CLIENT_ID=$AZURE_CLIENT_ID \
                 -e AZURE_TENANT_ID=$AZURE_TENANT_ID \
                 -e AZURE_CLIENT_SECRET=$AZURE_CLIENT_SECRET \
                 <你的镜像名称> python <你的脚本路径>

说明

DefaultAzureCredential会优先读取AZURE_CLIENT_ID、AZURE_TENANT_ID、AZURE_CLIENT_SECRET这三个环境变量,以此完成服务主体认证,无需额外配置。

方案2:将System.AccessToken转换为ARM访问令牌并传递

System.AccessToken是流水线的OAuth令牌,需先转换成ARM资源的访问令牌,再传递给容器,让DefaultAzureCredential通过AZURE_TOKEN环境变量识别:

YAML配置示例

- task: AzureCLI@2
  displayName: 'Run Docker container with pipeline token'
  inputs:
    azureSubscription: '<你的服务连接名称>'
    scriptType: 'bash'
    scriptLocation: 'inlineScript'
    inlineScript: |
      # 使用System.AccessToken获取ARM访问令牌
      ARM_TOKEN=$(az account get-access-token --resource https://management.azure.com/ --query accessToken -o tsv --identity --username $(System.AccessToken))

      # 运行Docker容器并传递ARM令牌
      docker run -e AZURE_TOKEN=$ARM_TOKEN \
                 <你的镜像名称> python <你的脚本路径>

说明

容器内的DefaultAzureCredential会检测到AZURE_TOKEN环境变量,直接使用该令牌调用ARM API。需确保流水线的服务连接(或托管标识)拥有操作Azure ML资源的权限。

方案3:生成Azure配置文件并挂载到容器

在AzureCLI@2任务中先执行az login生成本地配置文件,再将该目录挂载到容器对应路径:

YAML配置示例

- task: AzureCLI@2
  displayName: 'Run Docker container with mounted Azure config'
  inputs:
    azureSubscription: '<你的服务连接名称>'
    scriptType: 'bash'
    scriptLocation: 'inlineScript'
    inlineScript: |
      # 创建临时目录存放Azure配置
      AZURE_CONFIG_DIR=$(mktemp -d)
      export AZURE_CONFIG_DIR=$AZURE_CONFIG_DIR

      # 登录Azure生成配置文件
      az login --service-principal -u $(az account show --query clientId -o tsv) -p $(az account get-access-token --query accessToken -o tsv) --tenant $(az account show --query tenantId -o tsv)

      # 运行Docker容器,挂载配置目录到容器的/root/.azure
      docker run -v $AZURE_CONFIG_DIR:/root/.azure \
                 <你的镜像名称> python <你的脚本路径>

说明

这种方式模拟本地开发时的~/.azure目录,容器内的DefaultAzureCredential会自动读取该目录下的配置文件完成认证。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 19:10:20