如何连接EC2实例上Docker-Compose部署的PostgreSQL数据库?
解决无法连接PostgreSQL数据库的步骤
一、本地pgadmin连接5432端口超时的排查
检查EC2安全组入站规则
登录AWS控制台,找到对应EC2实例的安全组,添加入站规则:- 类型选「PostgreSQL(5432)」
- 源设置为你的本地公网IP(可通过
curl ifconfig.me获取),测试阶段可临时设为0.0.0.0/0(注意生产环境要改回指定IP)
验证Docker端口映射
确认docker-compose.yml中postgres服务的ports配置是否将容器5432端口映射到EC2主机的5432端口,示例:services: postgres: # 其他配置... ports: - "5432:5432" # 主机端口:容器端口调整PostgreSQL容器的访问配置
确保PostgreSQL允许外部IP访问:- 在
docker-compose.yml的postgres服务中添加command参数强制开启全局监听:services: postgres: # 其他配置... command: -c listen_addresses='*' - 确认环境变量配置正确,比如设置了
POSTGRES_PASSWORD,且连接时使用对应的用户名、密码
- 在
二、EC2域名:5000无法访问pgadmin的排查
检查pgadmin的端口映射
pgadmin容器默认使用80端口,确保docker-compose.yml中pgadmin服务的ports配置正确映射到主机5000端口:services: pgadmin: # 其他配置... ports: - "5000:80" # 主机5000端口映射到容器80端口更新安全组入站规则
在EC2安全组中添加入站规则:- 类型选「自定义TCP」
- 端口范围填
5000 - 源设置为你的本地公网IP或临时
0.0.0.0/0
访问协议与地址检查
访问时使用http://ec2-xx-xx-xx-xx.compute-1.amazonaws.com:5000,注意是HTTP协议,不要用HTTPS(除非你额外配置了SSL证书)
三、本地验证容器连通性(EC2实例内部操作)
- 先确认PostgreSQL容器本身可正常访问:
执行docker exec -it <postgres容器ID或名称> psql -U <数据库用户名> -d <数据库名>,能进入psql命令行则容器内部正常 - 再验证EC2主机到容器的端口映射:
在EC2实例上执行psql -h localhost -p 5432 -U <数据库用户名> -d <数据库名>,能连接则端口映射正常,问题出在安全组或本地网络;不能连接则检查Docker配置
四、其他排查点
- 确认EC2实例的公网IP是否正确,若未绑定弹性IP,重启实例后IP会变更,需更新连接地址
- 检查本地网络是否有防火墙、代理阻止5432/5000端口,可切换手机热点测试
- 若使用VPC,确认子网路由表允许公网流量出入
内容的提问来源于stack exchange,提问作者Алексей Василенко
相关产品推荐
相关产品推荐

