【发布时间】:2020-04-12 02:32:44
【问题描述】:
所以我创建了一个 java spring boot 应用程序,它使用 Keycloak 对其用户进行身份验证。 当我从 docker-compose 运行 keycloak 时,我可以在将应用程序作为独立 jar 文件运行或调试时成功进行身份验证。但是当我将我的 Spring Boot 应用程序作为 docker 容器放入 docker-compose 时。我无法再对用户进行身份验证。
我来自 spring boot docker 容器的错误日志:
springBootApp | 2019-12-19 13:16:41.498 ERROR 1 --- [nio-8081-exec-2] o.k.a.rotation.JWKPublicKeyLocator : Error when sending request to retrieve realm keys
springBootApp |
springBootApp | org.keycloak.adapters.HttpClientAdapterException: IO error
我认为问题出在网络上。但所有容器都在同一个虚拟网络中运行。它们也在同一个 docker-compose 文件中。
这是我的钥匙斗篷部分:
keycloak:
image: jboss/keycloak
ports:
- 18080:8080
volumes:
- ../keycloak:/opt/jboss/keycloak/imports
command:
- "-b 0.0.0.0 -Dkeycloak.import=/opt/jboss/keycloak/imports/realm-export.json"
environment:
- KEYCLOAK_USER=admin
- KEYCLOAK_PASSWORD=admin
我的春季启动应用程序
mySpringBootApp:
image: mySpringBootApp:master-1
environment:
- SPRING_PROFILES_ACTIVE=developmentTest
depends_on:
- jaeger
- keycloak
- db
ports:
- "8081:8081"
当我尝试使用
curl localhost:18080 来自我的主人。我得到了回应。
当我尝试使用 springBootApp docker 中的 curl 时,连接被拒绝。所以我假设即使他们在同一个网络中,他们也看不到对方。
【问题讨论】:
-
我也遇到了同样的问题,你最后是怎么解决的?
-
是的,实际上你必须在 docker 容器中使用 keycloak 的 IP 地址。您还可以从 docker 容器中通过主机名 so (keycloak:18080) 调用 keycloak。检查 docker 网络文档以获取解释