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

Docker Compose部署下Quarkus无法连接Keycloak Realm问题

Docker Compose部署Quarkus+Keycloak出现OIDC不可用及requestHost空指针问题排查

以下是针对你遇到问题的具体排查方向和解决方法:

  • Keycloak主机名配置缺失
    Keycloak在容器环境下需要明确知道自己的主机名,否则生成认证相关URL时会出现requestHost空指针异常。在docker-compose.yml的Keycloak服务中添加环境变量:

    environment:
      - KC_HOSTNAME=keycloak  # 容器内部可用服务名,对外访问可替换为宿主机IP/域名
      - KC_HOSTNAME_STRICT=false  # 开发环境关闭严格主机名校验
    

    同时确保Quarkus的OIDC配置中,quarkus.oidc.auth-server-url使用Docker Compose内部服务名,比如http://keycloak:8080/realms/你的Realm名,而非localhost(容器内localhost指向自身,而非宿主机)。

  • Quarkus启动时机过早
    Quarkus启动速度快于Keycloak初始化完成,导致启动阶段检测OIDC服务不可用。可通过Docker Compose的健康检查机制让Quarkus等待Keycloak就绪:

    services:
      quarkus-app:
        depends_on:
          keycloak:
            condition: service_healthy
      keycloak:
        healthcheck:
          test: ["CMD-SHELL", "curl -f http://localhost:8080/health/ready || exit 1"]
          interval: 10s
          timeout: 5s
          retries: 5
    

    也可以在Quarkus配置文件中增加连接超时和重试:

    quarkus.oidc.connection-timeout=10s
    quarkus.oidc.read-timeout=10s
    quarkus.oidc.retry-count=3
    
  • Keycloak代理模式配置错误
    如果Quarkus请求Keycloak时的Host头未被正确识别,会导致requestHost为空。添加代理相关环境变量:

    environment:
      - KC_PROXY=edge  # 开发环境用edge模式即可
      - KC_HTTP_ENABLED=true  # 确保HTTP服务启用(部分Keycloak版本默认关闭HTTP)
    
  • 协议/端口配置不匹配
    检查Quarkus的OIDC配置是否和Keycloak容器内的服务端口一致:比如Keycloak容器内默认开放8080端口,Quarkus的auth-server-url就必须用http://keycloak:8080/...,不要错误使用HTTPS或其他端口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 00:04:59