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

AWS问题:EC2上Docker容器无法连接RDS MySQL数据库

排查EC2 Docker容器连接RDS超时问题

以下是针对你遇到的连接超时问题的分步排查方案:

1. 先验证EC2到RDS的基础连通性

容器默认通过EC2的网络栈访问外部资源,EC2能连通RDS是容器连通的前提:

  • 在EC2实例上执行 mysql -h <你的RDS端点> -u <RDS用户名> -p,输入密码后尝试连接
  • 如果这一步就超时,说明问题出在EC2和RDS的网络链路,和Docker无关,优先排查后续安全组/ACL配置

2. 安全组配置检查

RDS安全组

  • 入站规则必须添加:端口3306,来源为EC2实例所在的安全组ID(不要用0.0.0.0/0,既不安全也可能因配置不当导致异常)
  • 确认规则协议为TCP(MySQL默认使用TCP协议)

EC2安全组

  • 出站规则允许所有流量(或至少允许到3306端口的TCP流量到RDS的安全组),默认出站规则一般为全通,若修改过需重新检查

3. VPC网络ACL检查

网络ACL是无状态的,必须双向允许流量:

  • 入站ACL规则:允许TCP 3306端口,来源为EC2所在子网的CIDR
  • 出站ACL规则:允许TCP 3306端口,目标为RDS所在子网的CIDR
  • 不要漏掉出站回包流量,否则会出现连接停滞的情况

4. 容器环境变量与RDS端点验证

  • 登录后端容器执行 docker exec <后端容器ID> env,检查RDS相关环境变量(如RDS_HOST、DB_USER、DB_PASSWORD)是否正确注入,有无拼写错误或值为空
  • 确认RDS_HOST是完整的RDS端点(格式类似xxx.xxxxxx.us-east-1.rds.amazonaws.com),而非私有IP或错误域名
  • 在容器内执行 ping <RDS端点> 或 telnet <RDS端点> 3306,验证DNS解析和端口连通性

5. RDS实例状态与配置检查

  • 确认RDS实例处于「可用(Available)」状态,避免实例处于创建、维护或故障状态
  • 检查RDS参数组的bind_address配置,RDS默认允许所有内部访问,不要被自定义参数限制
  • 若尝试过开启RDS公开访问:
    • 必须在RDS安全组添加本地机器的公网IP作为3306端口的来源
    • 确认RDS所在VPC已配置互联网网关,且RDS子网的路由表有指向互联网网关的路由

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 13:27:50