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

DevContainer中Terraform调用Azure应用注册执行plan时令牌获取失败

问题描述

我在Azure门户(portal.azure.com)中为Terraform创建了新的应用注册,生成了证书和密钥,该应用已被赋予Cloud Application Administrator角色。尝试通过该应用注册运行Terraform脚本,运行环境是VSCode中的DevContainer(开发环境已容器化)。

我的Terraform代码如下:

terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = ">=3.53.0"
    }
    azapi = {
      source = "azure/azapi"
    }
  }
}

provider "azurerm" {
  features {}
  subscription_id = "<subscription_id>"
  client_id = "<client_id>"
  client_secret = "<client_secret>"
  tenant_id = "<tenant_id>"
}
provider "azapi" {
  subscription_id = "<subscription_id>"
  client_id = "<client_id>"
  client_secret = "<client_secret>"
  tenant_id = "<tenant_id>"
  use_cli = true
}

执行terraform plan命令时出现以下错误:

│ Error: building account: could not acquire access token to parse claims: clientCredentialsToken: cannot request token: Post "https://login.microsoftonline.com/8e7e5486-6e11-48bf-9cca-ef5fd4205af3/oauth2/v2.0/token": POST https://login.microsoftonline.com/8e7e5486-6e11-48bf-9cca-ef5fd4205af3/oauth2/v2.0/token giving up after 5 attempt(s): Post "https://login.microsoftonline.com/8e7e5486-6e11-48bf-9cca-ef5fd4205af3/oauth2/v2.0/token": dial tcp: lookup login.microsoftonline.com on 127.0.0.11:53: server misbehaving
│ 
│   with provider["registry.terraform.io/hashicorp/azurerm"],
│   on providers.tf line 13, in provider "azurerm":
│   13: provider "azurerm" {
解决方案

从错误信息来看,核心问题是DevContainer无法解析login.microsoftonline.com的DNS地址,以下是针对性解决步骤:

  • 测试容器网络连通性:进入DevContainer终端,执行nslookup login.microsoftonline.com或ping login.microsoftonline.com,确认是否能正常解析和访问该域名。
  • 自定义容器DNS服务器:在.devcontainer/devcontainer.json中添加DNS配置,替换为公共DNS(比如Google的8.8.8.8):
    "runArgs": ["--dns=8.8.8.8", "--dns=8.8.4.4"]
    
  • 重启DevContainer:修改配置后,重新构建并启动容器,使网络设置生效。
  • 验证凭证有效性:虽然错误源于DNS,但可顺带确认client_id、client_secret、tenant_id、subscription_id是否填写正确,避免后续其他问题。
  • 利用Azure CLI预登录:由于azapi provider设置了use_cli = true,可先在容器内执行Azure CLI登录命令,确认能正常获取token:
    az login --service-principal -u <client_id> -p <client_secret> --tenant <tenant_id>
    
    登录成功后再运行terraform plan。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 20:42:12