ECS Fargate中Docker容器无法连接RDS数据库求助排查
ECS Fargate容器无法连接RDS实例排查求助
过去3小时我一直在尝试让ECS Fargate上的Docker容器连接到RDS实例,但始终失败,不清楚问题出在哪。
我使用Ruby Docker镜像,数据库配置文件config/database.yml内容如下:
default: &default adapter: postgresql encoding: unicode pool: 5 production: <<: *default host: <%= ENV['DATABASE_URL'] %> username: <%= ENV['DATABASE_USERNAME'] %> password: <%= ENV['DATABASE_PASSWORD'] %> database: my_project_db
环境变量配置:
DATABASE_URL=myprojectdbinstance.c42n4hggvli1.eu-central-1.rds.amazonaws.com
该值为RDS的端点URL,我的数据库标识符是myprojectdbinstance,初始数据库名称为my_project_db。
运行ECS任务时出现以下错误:
ActiveRecord::NoDatabaseError: We could not find your database: myprojectdbinstance.c42n4hggvli1.eu-central-1.rds.amazonaws.com. Which can be found in the database configuration file located at config/database.yml PG::ConnectionBad: could not translate host name "myprojectdbinstance.c42n4hggvli1.eu-central-1.rds.amazonaws.com" to address: Name does not resolve
我已经做了这些配置:
- ECS与RDS处于同一VPC中
- ECS任务属于
projects-alb-sg安全组,RDS已配置接受该安全组的入站流量 - VPC已启用DNS解析和DNS主机名功能
- RDS实例设置为公开访问
- 创建了与ECS任务所在子网一致的DB子网组
我试过各种可能的配置,但问题依然存在,请问我遗漏了什么配置?
更新信息
- 已确认VPC的DNS解析功能已启用
- 在同VPC内的EC2实例上执行
nslookup命令,输出结果如下:
nslookup myprojectdbinstance.c42n4hggvli1.eu-central-1.rds.amazonaws.com Server: 10.0.0.2 Address: 10.0.0.2#53 Non-authoritative answer: myprojectdbinstance.c42n4hggvli1.eu-central-1.rds.amazonaws.com canonical name = ec2-18-193-32-4.eu-central-1.compute.amazonaws.com. Name: ec2-18-193-32-4.eu-central-1.compute.amazonaws.com Address: 10.0.1.233
- 数据库安全组已配置允许来自安全组
sg-047f1acd163d6f380的访问 - ECS任务使用的安全组为
sg-047f1acd163d6f380,配置正常
内容的提问来源于stack exchange,提问作者jedi
相关产品推荐
相关产品推荐

