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

如何连接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访问:

    1. 在docker-compose.yml的postgres服务中添加command参数强制开启全局监听:
      services:
        postgres:
          # 其他配置...
          command: -c listen_addresses='*'
      
    2. 确认环境变量配置正确,比如设置了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,提问作者Алексей Василенко

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 22:55:56