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=3Keycloak代理模式配置错误
如果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
相关产品推荐
相关产品推荐

