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

Keycloak Docker容器无法连接同网络MySQL 启动仍默认使用H2数据库

问题根因

Keycloak 15.0.2 版本默认使用H2内置数据库,你未提供完整的MySQL切换配置参数,导致程序无法识别MySQL对接需求,直接沿用默认H2配置启动。
你缺失的核心配置项如下:

  • DB_VENDOR参数:该参数用于明确指定Keycloak对接的数据库类型,必须设置为mysql才会加载MySQL连接逻辑
  • DB_USER参数:Keycloak默认读取的数据库用户名为keycloak,和你MySQL容器中创建的edci-keycloak用户名不匹配
  • DB_DATABASE参数:Keycloak默认读取的数据库名为keycloak,和你MySQL容器中创建的edci-keycloak库名不匹配
修复操作步骤
  1. 先清理已创建的异常容器和网络(如果已存在):
docker rm -f edci-keycloak edci-keycloak-mysql
docker network rm edci-network
  1. 重新创建网络并启动MySQL容器(原有MySQL配置无问题,建议固定MySQL版本避免兼容性问题):
# 创建Keycloak专属网络
docker network create edci-network

# 启动MySQL服务
docker run \
    --name edci-keycloak-mysql \
    -d \
    --net edci-network \
    -e MYSQL_DATABASE=edci-keycloak \
    -e MYSQL_USER=edci-keycloak \
    -e MYSQL_PASSWORD=password \
    -v /path/to/local/database:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=root_password \
    mysql:8.0
  1. 等待MySQL完全初始化完成后再启动Keycloak:可执行docker logs -f edci-keycloak-mysql查看日志,出现ready for connections提示后再执行下一步,避免因MySQL未就绪导致连接失败回退到H2。

  2. 运行修正配置后的Keycloak容器:

docker run \
    --name edci-keycloak \
    -d \
    -p 9000:8080 \
    --net edci-network \
    -e KEYCLOAK_USER=admin \
    -e KEYCLOAK_PASSWORD=admin \
    -e DB_VENDOR=mysql \
    -e DB_ADDR=edci-keycloak-mysql \
    -e DB_DATABASE=edci-keycloak \
    -e DB_USER=edci-keycloak \
    -e DB_PASSWORD=password \
    -e JAVA_OPTS_APPEND="
        -Dkeycloak.profile.feature.token_exchange=enabled
        -Dkeycloak.profile.feature.admin_fine_grained_authz=enabled
    " \
    quay.io/keycloak/keycloak:15.0.2
配置验证

启动完成后查看Keycloak日志,出现Using MySQL database字样即代表配置生效,已成功对接MySQL数据库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:24:06