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

在OpenShift上创建MySQL驱动的Keycloak应用时遇连接错误

解决Keycloak连接MySQL时的NumberFormatException: "tcp:"错误

这个错误我之前部署Keycloak连接MySQL时也踩过坑,核心问题出在JDBC连接URL的格式错误上!

错误原因分析

从你的错误栈里能看到关键信息:

Caused by: java.lang.NumberFormatException: For input string: "tcp:"

MySQL驱动在尝试解析数据库连接端口时,把字符串tcp:当成了要转换为整数的端口号,这显然是不对的。这种情况一般是因为你配置的JDBC URL格式错误,误用了类似jdbc:mysql://tcp:<host>:<port>/keycloak的格式——而MySQL的JDBC URL根本不需要tcp:前缀!

具体解决步骤

结合你在OpenShift上的部署场景,按以下步骤修正:

  1. 修正JDBC URL格式
    正确的MySQL JDBC URL格式应该是:

    jdbc:mysql://<数据库主机>:<端口>/<数据库名>?useSSL=false&characterEncoding=UTF-8
    

    在OpenShift环境中,你可以直接引用MySQL服务暴露的环境变量来拼接,比如:

    jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT}/keycloak?useSSL=false&characterEncoding=UTF-8
    
  2. 修改OpenShift模板配置
    打开你使用的keycloak-https.json模板,找到Keycloak容器的环境变量配置部分,确保数据库相关参数正确:

    {
      "name": "DB_VENDOR",
      "value": "mysql"
    },
    {
      "name": "DB_URL",
      "value": "jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT}/keycloak?useSSL=false&characterEncoding=UTF-8"
    },
    {
      "name": "DB_USER",
      "value": "keycloak"
    },
    {
      "name": "DB_PASSWORD",
      "value": "password"
    }
    

    重点检查DB_URL,一定要去掉错误的tcp:前缀。

  3. 重新部署Keycloak
    删除之前失败的部署,用修改后的模板重新创建Keycloak实例,应该就能正常连接MySQL了。

额外注意事项

  • 你使用的jboss/keycloak:4.8.1.Final镜像已经包含了MySQL驱动,不需要额外添加;
  • 如果还是有连接问题,可以检查MySQL服务是否在OpenShift内部正常可达,比如通过oc rsh进入Keycloak容器,尝试用telnet ${MYSQL_SERVICE_HOST} ${MYSQL_SERVICE_PORT}测试连通性。

内容的提问来源于stack exchange,提问作者Altay Hunoğlu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:00:36