我创建了一个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部分:
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
我的Spring Boot应用程序
mySpringBootApp:
image: mySpringBootApp:master-1
environment:
- SPRING_PROFILES_ACTIVE=developmentTest
depends_on:
- jaeger
- keycloak
- db
ports:
- "8081:8081"
当我从我的主机使用curl localhost:18080
时,我得到了响应。但是,当我从springBootApp docker中使用curl时,我收到了连接被拒绝的错误。因此,我认为即使它们在同一个网络中,它们也无法相互访问。