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

如何将Azure凭据从Azure Ubuntu VM注入Docker容器?

将Azure认证凭据传递到Docker容器的解决方案

为什么挂载$HOME/.azure无效?

常见原因包括:

  • 权限问题:容器内运行用户没有读取挂载目录的权限
  • 路径不匹配:容器内运行用户不是root,挂载到/root/.azure无法被识别
  • CLI版本兼容:容器内Azure CLI版本与VM上的版本不一致,导致凭据格式不兼容

方案1:通过环境变量传递服务主体凭据

如果VM上是通过服务主体完成的az login,可以直接导出当前有效凭据为环境变量,传递给容器:

  1. 在VM上执行以下命令导出凭据信息:
    # 获取服务主体ID和租户ID
    AZURE_CLIENT_ID=$(az account show --query "user.name" -o tsv)
    AZURE_TENANT_ID=$(az account show --query "tenantId" -o tsv)
    # 获取当前有效的访问令牌
    AZURE_ACCESS_TOKEN=$(az account get-access-token --query "accessToken" -o tsv)
    
  2. 运行容器时传入这些环境变量:
    docker run -e AZURE_CLIENT_ID=$AZURE_CLIENT_ID \
      -e AZURE_TENANT_ID=$AZURE_TENANT_ID \
      -e AZURE_ACCESS_TOKEN=$AZURE_ACCESS_TOKEN \
      <你的镜像名称>
    

容器内的Azure CLI会自动读取这些环境变量完成认证,无需额外执行az login。

方案2:利用VM的托管标识直接认证(推荐)

如果VM使用的是Azure托管标识(系统分配/用户分配)完成认证,容器可以直接复用VM的标识权限,无需传递任何凭据:

  • 系统分配托管标识:直接在容器内执行az login --identity即可,运行容器时无需额外配置:
    docker run <你的镜像名称> /bin/sh -c "az login --identity && <你的业务命令>"
    
  • 用户分配托管标识:需要指定标识的客户端ID:
    docker run <你的镜像名称> /bin/sh -c "az login --identity --username <托管标识客户端ID> && <你的业务命令>"
    

默认情况下,容器使用bridge网络即可访问VM的实例元数据服务,完成标识认证。

方案3:修复$HOME/.azure挂载的权限问题

如果坚持使用挂载目录的方式,需要解决权限和路径匹配问题:

  1. 查看VM上$HOME/.azure的权限信息:
    ls -ld $HOME/.azure
    
  2. 选择以下一种方式调整容器运行配置:
    • 匹配用户ID运行容器:以VM当前用户的UID/GID运行容器,挂载到容器内对应用户的.azure目录:
      docker run -u $(id -u):$(id -g) \
        -v $HOME/.azure:/home/$(whoami)/.azure \
        <你的镜像名称>
      
    • 临时调整目录权限(不推荐,存在安全风险):
      chmod -R 755 $HOME/.azure
      docker run -v $HOME/.azure:/root/.azure <你的镜像名称>
      

同时要确保容器内的Azure CLI版本与VM上的版本一致,避免凭据格式不兼容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 16:30:44