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

Spring Boot 3.1.5 Docker化连接PostgreSQL报错:数据库不存在

解决Spring Boot + Docker Compose连接PostgreSQL时数据库不存在的问题

使用Spring Boot 3.1.5、Java 17和Maven,首次尝试通过Docker Compose将Spring Boot应用容器化并连接PostgreSQL数据库,配置相关文件后启动报错:

Caused by: org.postgresql.util.PSQLException: FATAL: database "desafio_stone_docker" does not exist.

调整配置(添加spring-boot-docker-compose依赖、简化配置)后问题依旧,以下是具体排查和解决方法:

可能的原因及解决步骤

1. 数据库初始化延迟

PostgreSQL容器启动后需要一定时间完成初始化,Spring Boot应用可能在数据库就绪前发起连接,导致找不到目标数据库。

  • 解决方法:
    1. 在docker-compose.yml中为PostgreSQL服务添加健康检查,确保数据库就绪后再允许外部连接:
      version: '3.8'
      services:
        db:
          image: postgres:alpine
          ports:
            - "5432:5432"
          environment:
            POSTGRES_USER: postgres
            POSTGRES_PASSWORD: postgres
            POSTGRES_DB: desafio_stone_docker
          healthcheck:
            test: ["CMD-SHELL", "pg_isready -U postgres -d desafio_stone_docker"]
            interval: 5s
            timeout: 5s
            retries: 5
      
    2. 在Spring Boot配置中添加连接重试机制,修改application-dev.yml:
      spring:
        datasource:
          url: jdbc:postgresql://db:5432/desafio_stone_docker
          username: postgres
          password: postgres
          hikari:
            connection-timeout: 20000
            initialization-fail-timeout: 0 # 无限等待直到连接成功
        sql:
          init:
            mode: always
      

2. 配置优先级冲突

同时存在application.yml和application-dev.yml,且激活了dev环境,需确保dev配置完全覆盖主配置中的数据库参数:

  • 解决方法:
    修改application.yml,移除主配置中的数据库连接信息,让dev配置完全接管:
    spring:
      profiles:
        active: dev
      jpa:
        properties:
          hibernate:
            dialect: org.hibernate.dialect.PostgreSQLDialect
            format_sql: true
        hibernate:
          ddl-auto: update
        show-sql: false
    

3. 容器数据卷残留

若之前启动过PostgreSQL容器,数据卷中可能残留旧数据,导致新容器未正确创建目标数据库:

  • 解决方法:
    停止并彻底删除容器及关联数据卷,重新启动:
    docker-compose down -v
    docker-compose up
    

4. 验证数据库是否创建成功

手动进入PostgreSQL容器,检查目标数据库是否存在:

# 进入容器
docker exec -it db psql -U postgres
# 列出所有数据库
\l

若列表中无desafio_stone_docker,需检查docker-compose.yml中的环境变量是否拼写正确(比如POSTGRES_DB是否误写为POSTGRES_DATABASE)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 20:03:26