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

如何Docker化Spring Cloud Gateway、Eureka Server并对接Keycloak?

Spring Cloud Gateway、Eureka Docker化对接Keycloak方案指导

1. 关于官方镜像的问题

Spring官方并没有在Docker Hub发布可直接运行的Spring Cloud Gateway和Eureka Server官方镜像。这两个组件都属于Spring Cloud体系下的开发框架,本身不提供开箱即用的业务逻辑,需要开发者根据自身需求配置路由规则、过滤器、服务注册发现策略、鉴权逻辑等自定义内容,因此不存在通用的官方运行镜像。

2. 镜像构建方案选择

不建议使用第三方个人上传的SCG、Eureka镜像,存在安全风险且自定义配置灵活性极低,推荐采用「自行开发应用后打包为Docker镜像」的方案,操作流程如下:

  • 第一步:先完成本地功能验证
    本地将三个组件的对接逻辑跑通:
    • Eureka Server完成服务注册基础配置
    • Spring Cloud Gateway引入Keycloak相关依赖,完成OAuth2资源服务器配置、路由规则配置、服务注册到Eureka的配置
    • 本地测试鉴权、转发逻辑无异常后再进行容器化操作
  • 第二步:打包Spring Boot可执行包
    用项目对应的构建工具打包,Maven项目执行命令:
    mvn clean package -DskipTests
    执行完成后可在项目target目录下得到后缀为.jar的可执行文件
  • 第三步:编写Dockerfile构建镜像
    给SCG、Eureka服务分别编写Dockerfile,参考示例如下(以OpenJDK 17为例):
    # 基础镜像使用官方OpenJDK镜像,可根据自己项目的JDK版本调整
    FROM openjdk:17-jdk-slim
    WORKDIR /app
    # 替换为你自己打包生成的jar包名称
    COPY target/gateway-demo.jar app.jar
    ENTRYPOINT ["java", "-jar", "app.jar"]
    
    编写完成后在Dockerfile所在目录执行构建命令:
    docker build -t 自定义镜像名:版本号 .
  • 第四步:多服务统一编排
    推荐使用docker-compose统一管理Eureka、SCG、Keycloak三个服务,配置自定义网络让三个容器可以通过服务名互相访问,避免宿主机IP变动导致的调用失败问题。例如Eureka服务配置的服务名为eureka-server,那SCG里的注册地址就可以直接写http://eureka-server:8761/eureka,不需要填宿主机IP。

3. 对接Keycloak注意事项

容器化部署时要注意Keycloak的 issuer 地址配置:如果容器内部SCG访问Keycloak的地址和外部用户访问Keycloak的地址不一致,需要调整SCG的OAuth2校验配置,避免出现issuer校验不通过的鉴权失败问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:06:02