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

Docker-Compose+Flyway启动报错:users数据库不存在的解决求助

问题描述

使用Docker Compose部署集成Flyway的Spring Boot应用时,启动userapi服务时出现错误,提示数据库users不存在,导致Flyway无法完成迁移,应用启动失败。

相关配置

application-prod.properties

spring.flyway.enabled=true
spring.flyway.url=jdbc:postgresql://postgres:5432/users
spring.flyway.user=postgres
spring.flyway.password=1234
spring.flyway.locations=classpath:db/migration

docker-compose.yml

version: '3'
services:
  postgres:
    image: postgres:latest
    environment:
      POSTGRES_DB: users
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: 1234
    ports:
      - "5432:5432"
    volumes:
      - /srv/db_data:/var/lib/postgresql/data

  auth:
    build:
      context: ./auth
    ports:
      - "8080:8080"
    volumes:
      - /srv/photos:/srv/photos

  userapi:
    build:
      context: ./userApi
    ports:
      - "8081:8081"
    depends_on:
      - postgres

错误关键信息

postgres_1  | 2023-10-08 18:19:12.845 UTC [34] FATAL:  database "users" does not exist
userapi_1   | org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Unable to obtain connection from database: FATAL: database "users" does not exist
解决方案

1. 清理PostgreSQL持久化数据

PostgreSQL官方镜像的POSTGRES_DB等初始化环境变量仅在第一次启动、数据目录为空时生效。如果/srv/db_data目录已经存在旧的数据库数据,容器不会重新创建users数据库。

执行以下命令清理旧数据后重新启动:

# 停止并移除所有相关容器
docker-compose down
# 删除持久化数据目录
sudo rm -rf /srv/db_data
# 重新构建并启动服务
docker-compose up --build

2. 修复服务启动顺序问题

depends_on仅保证postgres容器先启动,但不保证PostgreSQL服务已经完全就绪(比如完成初始化、可以接受连接)。userapi启动时可能PostgreSQL还没准备好,导致连接失败。

修改docker-compose.yml,给postgres添加健康检查,让userapi等待PostgreSQL就绪后再启动:

version: '3'
services:
  postgres:
    image: postgres:latest
    environment:
      POSTGRES_DB: users
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: 1234
    ports:
      - "5432:5432"
    volumes:
      - /srv/db_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres -d users"]
      interval: 5s
      timeout: 5s
      retries: 5

  auth:
    build:
      context: ./auth
    ports:
      - "8080:8080"
    volumes:
      - /srv/photos:/srv/photos

  userapi:
    build:
      context: ./userApi
    ports:
      - "8081:8081"
    depends_on:
      postgres:
        condition: service_healthy

3. 验证配置正确性

  • 确认POSTGRES_DB环境变量拼写无误,PostgreSQL数据库名默认区分大小写,需保证和Flyway JDBC URL中的users完全一致。
  • 检查Flyway配置中的用户名、密码和PostgreSQL的POSTGRES_USER、POSTGRES_PASSWORD匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 01:23:10