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

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

问题排查及解决方案

核心问题原因

  • 1. PostgreSQL未自动创建目标数据库
    你配置的数据库名是postgreTest,但db服务的环境变量中未指定POSTGRES_DB参数,PostgreSQL默认只会创建和POSTGRES_USER同名的数据库(也就是postgres),即使后续连接通了也会出现库不存在的报错。
  • 2. 服务启动时序问题
    docker-compose的depends_on仅控制容器启动顺序,不会等待PostgreSQL进程完全初始化、可以接受TCP连接后再启动Spring Boot应用。PostgreSQL初始化通常需要3~10秒,此时应用提前启动就会抛出连接拒绝异常,这是你当前报错的最直接原因。
  • 3. 可选:网络端口校验(概率较低)
    同个docker-compose下的服务默认加入同一网桥,容器间可直接通过服务名通信不需要暴露端口,如果你修改过docker的网络配置才需要额外排查。

修复方案

第一步:修改docker-compose.yml配置

version: '2'

services:
  app:
    image: 'demo:latest'
    build:
      context: .
    container_name: app
    depends_on:
      db:
        condition: service_healthy
    environment:
      - SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/postgreTest
      - SPRING_DATASOURCE_USERNAME=postgres
      - SPRING_DATASOURCE_PASSWORD=B123456789
      - SPRING_JPA_HIBERNATE_DDL_AUTO=update

  db:
    image: 'postgres:alpine'
    container_name: db
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=B123456789
      - POSTGRES_DB=postgreTest
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 5s
      timeout: 5s
      retries: 5

第二步:重新部署

执行以下命令清除旧容器后重新启动:

docker compose down -v
docker compose up --build

临时验证方法

如果不想修改配置,可以先单独启动数据库,等初始化完成后再启动应用验证问题:

# 只启动数据库
docker compose up -d db
# 等待10秒后启动应用
sleep 10
docker compose up app

如果此时不再报错即可确认是启动时序导致的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 15:39:02