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

Docker部署Spring应用时连接PostgreSQL 5432端口被拒绝求助

排查PostgreSQL连接拒绝问题

1. 修正容器内数据库主机配置

在Docker环境中,应用容器里的localhost指向容器自身,而非宿主机的PostgreSQL容器。这是最常见的错误原因:

  • 打开application.properties,找到数据库连接URL:
    spring.datasource.url=jdbc:postgresql://localhost:5432/xxx
    
  • 将localhost替换为docker-compose.yml中PostgreSQL服务的名称(比如你的配置里的postgres):
    spring.datasource.url=jdbc:postgresql://postgres:5432/xxx
    

2. 确认PostgreSQL容器的端口与监听配置

  • 检查docker-compose.yml中PostgreSQL服务的端口映射是否正确:
    services:
      postgres:
        ports:
          - "5432:5432"
    
  • 验证PostgreSQL是否允许TCP/IP连接:官方PostgreSQL镜像默认已开启listen_addresses = '*',若使用自定义配置,需确保postgresql.conf中该项未被注释或修改。

3. 保证服务启动顺序合理性

添加健康检查,让应用等PostgreSQL完全就绪后再启动,避免因数据库未初始化完成导致连接失败:

services:
  app:
    depends_on:
      postgres:
        condition: service_healthy
  postgres:
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U your_username -d your_dbname"]
      interval: 5s
      timeout: 5s
      retries: 5

将your_username和your_dbname替换为你配置的数据库用户名和库名。

4. 核对数据库认证信息一致性

确保application.properties中的数据库用户名、密码、库名,与docker-compose.yml中PostgreSQL服务的环境变量完全匹配:

postgres:
  environment:
    POSTGRES_USER: your_username
    POSTGRES_PASSWORD: your_password
    POSTGRES_DB: your_dbname

5. 测试容器间网络连通性

启动容器后,进入应用容器执行以下命令,验证是否能连通PostgreSQL服务:

docker exec -it <你的应用容器名称> ping postgres
docker exec -it <你的应用容器名称> telnet postgres 5432

若无法连通,检查Docker网络配置——默认docker-compose会为所有服务创建共享网络,确保应用和PostgreSQL未被配置到不同网络。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 01:55:06