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

Docker部署Spring+Postgres应用时localhost:5432连接被拒绝求助

解决Docker容器中Spring Boot应用连接PostgreSQL被拒绝的问题

核心原因

容器内的localhost指向容器自身的网络栈,而非宿主机。你本地运行的PostgreSQL在宿主机上,容器直接用localhost:5432会尝试连接容器内部的5432端口,自然会被拒绝。

具体解决方案

情况1:连接宿主机上的本地PostgreSQL

  1. 修改Spring配置文件
    在application.properties中,将数据库URL的主机部分从localhost替换为Windows Docker专属的宿主机地址host.docker.internal:

    spring.datasource.url=jdbc:postgresql://host.docker.internal:5432/your_database_name
    spring.datasource.username=your_username
    spring.datasource.password=your_password
    
  2. 调整PostgreSQL监听配置

    • 打开PostgreSQL的配置文件postgresql.conf(通常在C:\Program Files\PostgreSQL\16\data目录下),修改listen_addresses为*,允许所有地址监听:
      listen_addresses = '*'
      
    • 打开pg_hba.conf,添加一条规则允许Docker容器网段的连接:
      host    all             all             0.0.0.0/0               scram-sha-256
      
    • 重启PostgreSQL服务使配置生效。

情况2:通过Docker Compose同时启动PostgreSQL和Spring应用

如果你的Compose.yaml里定义了PostgreSQL服务,直接用服务名作为数据库主机地址即可:

  1. Compose.yaml示例
    version: '3.8'
    services:
      postgres:
        image: postgres:16
        environment:
          POSTGRES_DB: your_database_name
          POSTGRES_USER: your_username
          POSTGRES_PASSWORD: your_password
        ports:
          - "5432:5432"
        volumes:
          - postgres_data:/var/lib/postgresql/data
      spring-app:
        build: .
        depends_on:
          - postgres
        environment:
          SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/your_database_name
          SPRING_DATASOURCE_USERNAME: your_username
          SPRING_DATASOURCE_PASSWORD: your_password
    volumes:
      postgres_data:
    
  2. 修改Spring配置
    确保application.properties中的数据库主机为Compose里的PostgreSQL服务名(比如上面的postgres):
    spring.datasource.url=jdbc:postgresql://postgres:5432/your_database_name
    

额外验证步骤

  • 执行docker exec -it <your-spring-container-id> ping host.docker.internal,验证容器能否连通宿主机
  • 在PowerShell中执行Get-NetTCPConnection -LocalPort 5432,确认PostgreSQL服务的LocalAddress包含0.0.0.0或你的宿主机IP,确保服务已对外开放端口

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 18:43:19