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

Docker Compose中Spring容器无法通过服务名连接PostgreSQL容器

Docker Compose下Spring连接PostgreSQL超时的排查与解决

1. PostgreSQL未就绪时Spring提前启动

Docker Compose的depends_on仅保证服务启动顺序,不确保数据库完成初始化(比如创建库、加载配置)。Spring启动时PostgreSQL可能还在准备状态,导致连接超时。

解决:

  • 给PostgreSQL服务添加健康检查,让Spring等待数据库就绪后再启动:
    services:
      db:
        image: postgres:latest
        environment:
          POSTGRES_DB: testdb
          POSTGRES_USER: your_user
          POSTGRES_PASSWORD: your_pass
        healthcheck:
          test: ["CMD-SHELL", "pg_isready -U your_user -d testdb"]
          interval: 5s
          timeout: 5s
          retries: 5
      app:
        build: .
        depends_on:
          db:
            condition: service_healthy
    
  • 或者在Spring Boot中调整连接池参数,增加重试和超时:
    spring.datasource.hikari.connection-timeout=30000
    spring.datasource.hikari.max-lifetime=1800000
    spring.datasource.test-on-borrow=true
    spring.datasource.validation-query=SELECT 1
    

2. PostgreSQL监听配置限制

部分PostgreSQL镜像默认listen_addresses设为localhost,仅允许本地连接,导致同网络下的Spring容器无法访问;或者pg_hba.conf未放行Docker子网的连接请求。

解决:

  • 启动PostgreSQL时强制设置监听所有地址:
    db:
      image: postgres:latest
      command: postgres -c listen_addresses='*'
      environment:
        POSTGRES_DB: testdb
        POSTGRES_USER: your_user
        POSTGRES_PASSWORD: your_pass
    
  • 自定义pg_hba.conf,添加Docker子网的访问权限:
    新建pg_hba.conf文件,添加:
    host    all             all             172.17.0.0/16            scram-sha-256
    
    然后在Docker Compose中挂载:
    db:
      ...
      volumes:
        - ./pg_hba.conf:/var/lib/postgresql/data/pg_hba.conf
    

3. JDBC URL参数缺失或错误

部分PostgreSQL镜像默认启用SSL,Spring未配置对应参数会导致连接失败;或用户名、密码配置不匹配。

解决:

  • 修改JDBC URL,添加SSL禁用参数(若不需要SSL):
    jdbc:postgresql://db:5432/testdb?sslmode=disable
    
  • 确认application.properties中的账号密码与PostgreSQL环境变量完全一致:
    spring.datasource.username=your_user
    spring.datasource.password=your_pass
    

4. 容器网络不互通

虽然debug容器能ping通db,但需确认Spring容器与db容器在同一个Docker网络中。若手动指定了网络,可能存在配置遗漏。

解决:

  • 显式配置共享网络:
    networks:
      app-net:
        driver: bridge
    
    services:
      db:
        ...
        networks:
          - app-net
      app:
        ...
        networks:
          - app-net
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:17:01