Docker Swarm容器内无法连接AWS RDS的问题排查求助
我在EC2实例中搭建了Docker Swarm集群,目前遇到容器内无法连接AWS RDS数据库的问题。
EC2主机执行nslookup xxxxxx.xxxxxxx.eu-west-2.rds.amazonaws.com可正常解析:
Server: 10.0.0.2 Address: 10.0.0.2#53 Non-authoritative answer: Name: xxxxxx.xxxxxxx.eu-west-2.rds.amazonaws.com Address: xxx.x.x.xx
但进入Docker容器内执行相同命令时,解析失败:
Server: 127.0.0.11 Address: 127.0.0.11:53 ** server can't find xxxxxx.xxxxxxx.eu-west-2.rds.amazonaws.com: SERVFAIL
RDS与EC2处于同一VPC,且RDS实例为非公开访问,请问可能的故障原因是什么?
可能的故障原因
Docker内置DNS转发异常:Docker默认用127.0.0.11作为容器DNS,这个内置服务可能无法正确转发VPC私有域名的查询请求。可以尝试在启动容器时手动指定VPC的DNS服务器(即EC2主机使用的10.0.0.2),通过
--dns 10.0.0.2参数,或在Swarm服务的compose文件中添加dns: ["10.0.0.2"]配置。VPC DNS基础配置缺失:检查VPC的
enableDnsSupport和enableDnsHostnames是否开启。这两个选项未启用时,容器内无法正常解析AWS私有域名(包括RDS域名)。Swarm overlay网络DNS配置问题:Swarm的overlay网络默认使用内置DNS,若网络未正确继承主机DNS设置,会导致解析失败。可尝试重新创建overlay网络时指定DNS服务器,或通过
docker network inspect <network-name>检查现有网络的DNS配置。安全组/NACL限制DNS流量:尽管RDS和EC2在同一VPC,但容器的DNS请求(53端口UDP/TCP流量)可能被EC2安全组或VPC NACL拦截。需确认EC2实例安全组允许出站到10.0.0.2的53端口流量,同时NACL允许相关DNS数据包通行。
RDS私有DNS区域关联异常:AWS RDS的私有域名依赖VPC关联的Route 53私有托管区域解析。若该区域未正确关联当前VPC,或解析记录存在异常,会导致容器内解析失败,可在Route 53中检查私有托管区域的VPC关联状态。
内容的提问来源于stack exchange,提问作者user3353167

