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库名不匹配
修复操作步骤
- 先清理已创建的异常容器和网络(如果已存在):
docker rm -f edci-keycloak edci-keycloak-mysql docker network rm edci-network
- 重新创建网络并启动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
等待MySQL完全初始化完成后再启动Keycloak:可执行
docker logs -f edci-keycloak-mysql查看日志,出现ready for connections提示后再执行下一步,避免因MySQL未就绪导致连接失败回退到H2。运行修正配置后的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
相关产品推荐
相关产品推荐

