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

Docker部署Keycloak连接PostgreSQL时出现配置错误

解决Keycloak Docker容器连接PostgreSQL时的配置冲突错误

问题重现

运行Keycloak Docker容器并关联PostgreSQL数据库时,触发以下错误:

ERROR: Failed to run 'build' command.
ERROR: Cannot invoke "io.smallrye.config.ConfigValue.withConfigSourceName(String)" because the return value of "org.keycloak.quarkus.runtime.configuration.mappers.PropertyMapper.transformValue(String, java.util.Optional, io.smallrye.config.ConfigSourceInterceptorContext)" is null

执行的Docker命令同时混合使用了数据库相关的环境变量与命令行参数。

错误根源

你重复配置了数据库连接信息:既通过环境变量(DB_ADDR、DB_PORT、DB_DATABASE等)设置,又通过命令行参数(--db-url、--db-username、--db-password)定义,导致Keycloak的配置映射组件出现冲突,返回空值触发该异常。

修复方案

选择以下任一方式统一配置逻辑,避免重复:

方案1:仅用环境变量配置

移除命令行中的数据库参数,保留环境变量配置:

docker run --name mykeycloak -p 8080:8080 \
  -e KEYCLOAK_ADMIN=admin \
  -e KEYCLOAK_ADMIN_PASSWORD=admin \
  -e DB_VENDOR=POSTGRES \
  -e DB_ADDR=localhost \
  -e DB_PORT=5432 \
  -e DB_DATABASE=wallet_realm \
  -e DB_USER=postgres \
  -e DB_PASSWORD=postgres \
  quay.io/keycloak/keycloak:latest \
  start \
  --features=token-exchange

方案2:仅用命令行参数配置

移除数据库相关环境变量,保留命令行参数配置:

docker run --name mykeycloak -p 8080:8080 \
  -e KEYCLOAK_ADMIN=admin \
  -e KEYCLOAK_ADMIN_PASSWORD=admin \
  quay.io/keycloak/keycloak:latest \
  start \
  --db=postgres \
  --features=token-exchange \
  --db-url=jdbc:postgresql://localhost:5432/wallet_realm \
  --db-username=postgres \
  --db-password=postgres

额外提示

  • 若PostgreSQL同样运行在Docker容器中,需将localhost替换为PostgreSQL容器的名称或网络别名,否则Keycloak容器无法访问到数据库服务。
  • 提前确认PostgreSQL服务已启动,wallet_realm数据库已创建,且postgres用户拥有该数据库的读写权限。

内容的提问来源于stack exchange,提问作者Mohamed Sid Abdalla Rgagde

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 00:42:42