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

Keycloak与PostgreSQL Docker Compose栈无数据库表问题求助

Keycloak关联PostgreSQL后数据库无表,容器无错误日志的排查与解决

问题描述

我构建了一个用于运行Keycloak并关联PostgreSQL数据库的Docker Compose栈,配置代码如下:

volumes:
  postgres_data:
    driver: local
services:
  postgres:
    image: postgres:14.1-alpine
    volumes:
      - path
    environment:
      POSTGRES_DB: test1
      POSTGRES_USER: ex
      POSTGRES_PASSWORD: ex
    ports:
      - '5433:5432'

  keycloak:
    image: quay.io/keycloak/keycloak
    volumes:
      - path
    environment:
      DB_VENDOR: POSTGRES
      DB_ADDR: postgres
      DB_DATABASE: test1
      DB_USER: ex
      DB_PASSWORD: ex
      DB_SCHEMA: public
      KEYCLOAK_USER: 'something'
      KEYCLOAK_PASSWORD: 'something'
    command:
      - start-dev
      - --import-realm
    ports:
      - "8080:8080"
    depends_on:
      - postgres

启动命令:docker compose up

注:配置中的值均为示例。

启动后容器无错误日志,但查看PostgreSQL数据库时未找到任何Keycloak相关表,需要技术帮助。

排查与修复步骤

1. 修正PostgreSQL卷配置

当前PostgreSQL服务的volumes配置- path无效,需将定义好的postgres_data卷挂载到容器内的数据库数据目录,保证数据持久化:

postgres:
  # 保留其他配置
  volumes:
    - postgres_data:/var/lib/postgresql/data

2. 更新Keycloak管理员用户配置

新版Keycloak已弃用KEYCLOAK_USER和KEYCLOAK_PASSWORD环境变量,需改用启动命令参数创建管理员:

keycloak:
  # 保留其他环境变量,移除KEYCLOAK_USER和KEYCLOAK_PASSWORD
  environment:
    DB_VENDOR: POSTGRES
    DB_ADDR: postgres
    DB_DATABASE: test1
    DB_USER: ex
    DB_PASSWORD: ex
    DB_SCHEMA: public
  command:
    - start-dev
    - --import-realm
    - --admin-user=something
    - --admin-password=something

3. 确保PostgreSQL就绪后启动Keycloak

depends_on仅保证容器启动顺序,需添加健康检查让Keycloak等待数据库服务完全可用:

postgres:
  # 保留其他配置
  healthcheck:
    test: ["CMD-SHELL", "pg_isready -U ex -d test1"]
    interval: 5s
    timeout: 5s
    retries: 5

keycloak:
  # 保留其他配置
  depends_on:
    postgres:
      condition: service_healthy

4. 验证数据库连接与初始化状态

  1. 进入PostgreSQL容器:docker exec -it <postgres-container-name> sh
  2. 连接目标数据库:psql -U ex -d test1
  3. 查看表列表:\dt
  4. 若仍无表,查看Keycloak详细日志:docker logs <keycloak-container-name>,日志中可能包含初始化失败的细节。

5. 清理旧卷重新启动

若之前的卷存在异常数据,执行以下命令清理后重新部署:

docker compose down -v
docker compose up

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 15:56:20