Terraform执行apply/destroy时随机出现dial tcp: lookup no such host错误
Terraform 随机出现「dial tcp: lookup no such host」错误的排查与解决
问题描述
执行terraform apply或terraform destroy时,会随机触发DNS解析失败错误,重新执行命令后可能恢复正常。错误示例如下:
Post "https://iam.amazonaws.com/": dial tcp: lookup iam.amazonaws.com on [2001:8a0:6f38:7c00::1]:53: no such host Post "https://firehose.eu-west-1.amazonaws.com/": dial tcp: lookup firehose.eu-west-1.amazonaws.com on [2001:8a0:6f38:7c00::1]:53: no such host Post "https://events.eu-west-1.amazonaws.com/": dial tcp: lookup events.eu-west-1.amazonaws.com on [2001:8a0:6f38:7c00::1]:53: no such host
已排查本地基础网络和域名解析,未发现持续性故障。
解决措施
1. 强制使用IPv4解析DNS
错误显示当前采用IPv6 DNS服务器(2001:8a0:6f38:7c00::1),可能存在间歇性IPv6解析故障。通过环境变量强制Terraform使用IPv4:
# Linux/macOS 终端执行 GODEBUG="netdns=go" terraform apply
# Windows PowerShell 执行 $env:GODEBUG = "netdns=go" terraform apply
2. 更换本地DNS服务器
当前DNS服务器存在不稳定风险,可切换至公共稳定DNS:
- 谷歌DNS:
8.8.8.8、8.8.4.4 - Cloudflare DNS:
1.1.1.1、1.0.0.1
修改系统DNS配置后,重新执行Terraform命令测试。
3. 增强Provider重试机制
在AWS Provider配置中增加重试参数,应对间歇性解析失败:
provider "aws" { region = "eu-west-1" retry_max = 5 # 最大重试次数 retry_wait_min = 10 # 最小等待间隔(秒) retry_wait_max = 30 # 最大等待间隔(秒) }
4. 升级Terraform及AWS Provider版本
旧版本可能存在DNS相关bug,升级至最新稳定版:
# 升级所有Provider terraform init -upgrade
也可在配置文件中指定AWS Provider版本:
terraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 5.0" # 锁定最新大版本 } } }
5. 清理本地DNS缓存
间歇性DNS缓存污染也可能导致问题,执行以下命令清理缓存:
- Linux:
sudo systemd-resolve --flush-caches - macOS:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder - Windows:
ipconfig /flushdns
内容的提问来源于stack exchange,提问作者rui
相关产品推荐
相关产品推荐

