Bitnami Keycloak(Quarkus)部署后PostgreSQL无表显示问题排查
问题:Bitnami Keycloak v20连接PostgreSQL后无表或数据库显示
我通过Docker Compose部署Bitnami的Keycloak v20.0.1(Quarkus)镜像,各项配置及运行均正常,但连接PostgreSQL数据库后,无法看到任何表或数据库。已配置以dev模式启动Keycloak,但问题仍未解决。以下是我的部署配置:
version: "3.7" services: keycloak: image: bitnami/keycloak:20.0.1 container_name: keycloak_20 environment: DB_VENDOR: POSTGRES DB_ADDR: postgres KEYCLOAK_ADMIN_USER: admin KEYCLOAK_ADMIN_PASSWORD: admin KEYCLOAK_DATABASE_HOST: postgres KEYCLOAK_DATABASE_PORT: 5432 KEYCLOAK_DATABASE_NAME: postgres KEYCLOAK_DATABASE_USER: postgres KEYCLOAK_DATABASE_PASSWORD: postgres KEYCLOAK_DATABASE_SCHEMA: public KEYCLOAK_EXTRA_ARGS: "-Dkeycloak.profile.feature.scripts=enabled" KC_HOSTNAME: postgres ENV KC_HOSTNAME_STRICT: false ENV KC_HTTP_ENABLED: true ports: - 8080:8080 volumes: - ./keycloak/export:/tmp/export - ./rus-theme:/opt/bitnami/keycloak/themes/my-theme - ./keycloak/configuration/standalone-ha.xml:/bitnami/keycloak/configuration/standalone-ha.xml:ro command: - /bin/bash - -c - | /opt/bitnami/keycloak/bin/kc.sh start-dev depends_on: - postgres postgres: image: postgres:10 container_name: postgres volumes: - postgres_data:/var/lib/postgresql/data environment: POSTGRES_DB: postgres POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres ports: - "5432:5432" mailhog: # 连接容器名即可访问,示例:mailhog:1025 image: mailhog/mailhog logging: driver: 'none' # 禁用日志保存 container_name: mailhog ports: - 1025:1025 # SMTP服务器 - 8025:8025 # Web管理界面 volumes: postgres_data: driver: local

问题排查与修复方案
核心错误点
- 环境变量混用冲突:同时使用了原生Keycloak旧版变量(
DB_VENDOR、DB_ADDR)、Bitnami专属变量(KEYCLOAK_DATABASE_*)和原生新版Quarkus变量(KC_*),导致Keycloak无法正确识别数据库配置,默认使用内置H2数据库而非PostgreSQL。 - 环境变量格式错误:
ENV KC_HOSTNAME_STRICT: false这类写法多余,Docker Compose中直接写变量名即可,无需加ENV前缀。 - 配置文件不兼容:挂载的
standalone-ha.xml是Wildfly时代的配置文件,Quarkus版Keycloak已不再使用,会干扰正常配置加载。 - 主机名配置错误:
KC_HOSTNAME: postgres将Keycloak主机名设为PostgreSQL容器名,会导致URL生成异常,影响初始化流程。
修正后的Docker Compose配置
version: "3.7" services: keycloak: image: bitnami/keycloak:20.0.1 container_name: keycloak_20 environment: # Bitnami专属数据库配置变量 KEYCLOAK_DATABASE_HOST: postgres KEYCLOAK_DATABASE_PORT: 5432 KEYCLOAK_DATABASE_NAME: postgres KEYCLOAK_DATABASE_USER: postgres KEYCLOAK_DATABASE_PASSWORD: postgres KEYCLOAK_DATABASE_SCHEMA: public # 管理员账号(Bitnami用KEYCLOAK_ADMIN而非KEYCLOAK_ADMIN_USER) KEYCLOAK_ADMIN: admin KEYCLOAK_ADMIN_PASSWORD: admin # Quarkus版配置参数,去掉多余ENV前缀 KC_HOSTNAME_STRICT: "false" KC_HTTP_ENABLED: "true" # 额外启动参数 KEYCLOAK_EXTRA_ARGS: "-Dkeycloak.profile.feature.scripts=enabled" ports: - 8080:8080 volumes: - ./keycloak/export:/tmp/export - ./rus-theme:/opt/bitnami/keycloak/themes/my-theme # 移除冲突的standalone-ha.xml配置文件 command: - /bin/bash - -c - | /opt/bitnami/keycloak/bin/kc.sh start-dev depends_on: - postgres postgres: image: postgres:10 container_name: postgres volumes: - postgres_data:/var/lib/postgresql/data environment: POSTGRES_DB: postgres POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres ports: - "5432:5432" mailhog: image: mailhog/mailhog logging: driver: 'none' container_name: mailhog ports: - 1025:1025 # SMTP服务器 - 8025:8025 # Web管理界面 volumes: postgres_data: driver: local
验证步骤
- 清理旧数据卷,避免残留配置干扰:
docker-compose down -v - 重新启动服务:
docker-compose up -d - 查看Keycloak日志确认数据库连接:
docker logs keycloak_20,检查是否出现成功连接PostgreSQL并初始化表的日志 - 再次连接PostgreSQL管理界面,即可看到Keycloak自动创建的一系列表(如
user_entity、realm等)
内容的提问来源于stack exchange,提问作者Maxi
相关产品推荐
相关产品推荐

