解决Docker环境下JHipster Control Center无法解析Keycloak地址的问题
解决Docker环境下JHipster Control Center无法解析Keycloak地址的问题
核心原因
你在宿主机hosts文件添加的keycloak映射仅对宿主机生效,Docker容器内部无法识别该映射;同时若Keycloak与Control Center不在同一Docker网络,容器之间也无法通过容器名互相访问。
解决方案
方法一:让两个容器加入同一Docker网络
- 创建共享网络
docker network create jhipster-shared-network
- 修改两个Compose配置文件
- 打开
src/main/docker/keycloak.yml,在services.keycloak节点下添加网络配置:
并在文件末尾添加网络声明:networks: - jhipster-shared-networknetworks: jhipster-shared-network: external: true - 对
src/main/docker/jhipster-control-center.yml执行同样的修改
- 打开
- 重启两个容器
docker-compose -f src/main/docker/keycloak.yml down && docker-compose -f src/main/docker/keycloak.yml up -d docker-compose -f src/main/docker/jhipster-control-center.yml down && docker-compose -f src/main/docker/jhipster-control-center.yml up -d
完成后两个容器即可通过keycloak容器名互相访问。
方法二:启动Control Center时直接添加host映射
启动容器时通过--add-host参数注入keycloak的地址映射,替换下方的宿主机IP为你实际的宿主机IP(如192.168.1.100):
docker-compose -f src/main/docker/jhipster-control-center.yml run --add-host keycloak:宿主机IP jhipster-control-center
若Keycloak也运行在容器中,可替换为Keycloak容器的实际IP,先通过以下命令查询:
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 你的keycloak容器ID或名称
方法三:修改Control Center的认证配置
找到Control Center的配置文件(如application.yml),将Issuer地址从http://keycloak:9080/realms/jhipster修改为宿主机IP+端口的形式,示例:
spring: security: oauth2: client: provider: oidc: issuer-uri: http://宿主机IP:9080/realms/jhipster
修改后重启Control Center容器即可。
内容的提问来源于stack exchange,提问作者Vidhya - Vidhyadharan
相关产品推荐
相关产品推荐

