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
相关产品推荐
相关产品推荐

