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

Docker部署Keycloak连接本地MySQL失败求助

Keycloak容器连接MySQL被拒绝问题排查

核心错误是日志中的java.net.ConnectException: Connection refused,说明Keycloak容器无法建立到MySQL的网络连接,以下是针对性排查步骤:

1. 修正数据库地址配置(最常见原因)

你当前配置的db-url=jdbc:mysql://localhost:3306/crowd_up_auth中,localhost指向Keycloak容器内部,而非宿主机或其他MySQL容器:

  • 若MySQL部署在宿主机:将localhost替换为宿主机的实际IP(如192.168.1.100),或使用Docker提供的特殊域名host.docker.internal(Linux需在启动容器时添加参数--add-host=host.docker.internal:host-gateway)。
  • 若MySQL也是Docker容器:确保两个容器处于同一Docker网络,然后将localhost替换为MySQL容器的名称(如启动MySQL时指定的--name mysql,则地址写mysql)。

2. 检查MySQL绑定地址限制

打开MySQL配置文件(my.cnf/my.ini),确认bind-address参数:

  • 如果设置为127.0.0.1,MySQL仅允许本地访问,容器无法连接。需修改为0.0.0.0允许所有IP访问,然后重启MySQL服务。

3. 验证端口与防火墙规则

  • 确认MySQL服务确实在3306端口监听:执行netstat -tulpn | grep 3306(Linux)或netstat -ano | findstr :3306(Windows)。
  • 检查宿主机防火墙(如ufw、firewalld)或云服务器安全组,确保3306端口对Keycloak所在IP/网段开放。

4. 确认MySQL用户权限

默认root用户可能仅允许本地登录,需授权其从Keycloak所在地址访问:

GRANT ALL PRIVILEGES ON crowd_up_auth.* TO 'root'@'%' IDENTIFIED BY '';
FLUSH PRIVILEGES;

(注意密码为空,与你配置的db-password=保持一致)

5. 确认目标数据库已创建

Keycloak不会自动创建数据库,需手动执行SQL创建:

CREATE DATABASE crowd_up_auth CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

推荐配置示例(针对宿主机MySQL)

修改keycloak.conf中的数据库URL,添加必要参数避免SSL及连接问题:

db-url=jdbc:mysql://host.docker.internal:3306/crowd_up_auth?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC

内容的提问来源于stack exchange,提问作者Mohamed Farouk Ayadi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 08:30:03