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

Spring Boot容器无法连接Docker Compose部署的PostgreSQL问题排查

问题排查方案

1. 修正Spring Boot的数据库连接地址

Spring Boot容器内的localhost指向容器自身,而非宿主机或PostgreSQL容器。必须将配置文件中的数据库地址替换为docker-compose里PostgreSQL服务的名称(比如服务名为postgres,则写postgres:5432)。

示例application.yml配置:

spring:
  datasource:
    url: jdbc:postgresql://postgres:5432/your_db_name
    username: your_user
    password: your_password

2. 确认容器网络归属

  • 默认docker-compose会为所有服务创建专属网络,确保Spring Boot和PostgreSQL服务都在该网络内(无需手动配置即可满足)。
  • 若手动指定了网络,需保证两个服务加入同一个网络配置。

3. 调整服务启动顺序

Spring Boot可能在PostgreSQL完全就绪前发起连接,导致失败。可通过以下方式处理:

  • 在docker-compose中为Spring Boot服务添加depends_on配置,声明依赖PostgreSQL服务;
  • 配合启动等待脚本(如wait-for-it.sh)或开启Spring Boot的数据库连接重试机制。

docker-compose示例配置:

services:
  spring-boot-app:
    build: .
    depends_on:
      - postgres
    command: ["./wait-for-it.sh", "postgres:5432", "--", "java", "-jar", "app.jar"]
  postgres:
    image: postgres:latest
    environment:
      POSTGRES_USER: your_user
      POSTGRES_PASSWORD: your_password
      POSTGRES_DB: your_db_name

4. 验证PostgreSQL的TCP连接配置

进入PostgreSQL容器,检查是否允许TCP/IP连接:

docker exec -it <postgres-container-id> psql -U your_user -c "SHOW listen_addresses;"

若输出为*,则表示允许所有IP访问,配置正常;若不是,需修改postgresql.conf中的listen_addresses = '*'并重启容器。

5. 排查宿主机防火墙/安全组

检查宿主机防火墙是否拦截了容器间的网络通信,确保docker内部网络的端口(5432)未被屏蔽。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 21:22:10