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

Docker容器中Spring Boot应用无法连接PostgreSQL数据库求助

问题排查:Spring Boot容器无法连接同网络下的PostgreSQL容器

报错信息

Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.

核心问题分析与修复

1. 数据库连接地址错误(最直接原因)

你的Spring Boot配置中,数据库URL使用了localhost:5432:

spring.datasource.url=jdbc:postgresql://localhost:5432/TheRewrite

在Docker容器内部,localhost指向容器自身,而非宿主机或其他容器。由于两个容器处于同一Docker网络therewrite,必须使用PostgreSQL服务的名称(docker-compose里的database)或者容器名(postgresCont)作为主机地址。

修改后的URL二选一即可:

# 推荐使用docker-compose服务名(更稳定,不受容器名变更影响)
spring.datasource.url=jdbc:postgresql://database:5432/TheRewrite
# 或使用容器名
spring.datasource.url=jdbc:postgresql://postgresCont:5432/TheRewrite

2. 额外优化检查点

  • 启动顺序问题:Spring Boot应用可能在PostgreSQL完全启动就绪前就尝试连接,导致连接失败。可以在docker-compose的app服务中添加依赖配置,保证启动顺序:
    services:
      app:
        # ...其他原有配置
        depends_on:
          - database
    
    注意:depends_on仅保证启动顺序,不保证数据库完全就绪。如果需要严格等待数据库可连接,可以在应用启动脚本中加入wait-for-it类的检测逻辑,或者在Spring Boot中配置数据库连接重试。
  • 网络配置验证:从容器状态和docker-compose配置看,两个容器都已加入therewrite网络,这部分无问题,容器间可直接通过服务名/容器名通信,无需依赖宿主机端口映射(5432:5432),该映射仅用于外部访问数据库。
  • 数据库配置匹配:你的POSTGRES_USER、POSTGRES_PASSWORD、POSTGRES_DB环境变量与Spring Boot配置完全匹配,这部分无需修改。

修复步骤

  1. 更新Spring Boot配置文件中的数据库URL,替换localhost为database或postgresCont。
  2. 重新构建并部署Spring Boot应用容器。
  3. 若仍出现连接超时,添加启动依赖或连接重试逻辑,确保应用在数据库就绪后再发起连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 03:42:41