我们有许多Spring Boot应用程序,并开始使用Docker“容器化” .
现在,我们在他们的application.yml文件中有Eureka运行(Spring Boot)和客户端应用程序(所有其他Spring Boot应用程序):
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
这适用于 before dockerization .
现在,当我对一个(Eureka客户端)应用程序进行dockerize(Eureka服务器仍然没有停靠)时,我不能使用“localhost”,因为Eureka不在同一个容器中运行 . 我能够通过复制其URL(192.168.2.77)连接到Eureka,所以现在变为:
eureka:
client:
serviceUrl:
defaultZone: http://192.168.2.77:8761/eureka/
这有效 .
Question 1 :
当Eureka服务器获得docker化时,我如何将其url传递给客户端应用程序?我认为我可以将上面的内容设置为:
eureka:
client:
serviceUrl:
defaultZone: ${eurekaURL}
并且在启动容器时使用“-e eurekaURL:xyz”但是如何获得Eureka服务器IP ...理想情况下,动态地?
Question 2 :
Spring Boot应用程序没有分配端口 . 在他们的application.yml文件中,我使用:
server.port: 0
以便分配任何可用的端口 .
但是,要公开端口以便可以访问正在运行的Web应用程序,在docker命令中我必须公开一个端口(... -p 8080:8080 ...) . 这怎么可能,因为在Spring Boot应用程序启动之前,“可用端口”是未知的?
1 回答
Question 1: :您可以为
eureka
容器使用别名,并为所有服务设置一个网络 . 例如,您可以将一个docker-compose
与所有容器和defaultZone: http://eureka-service:8761/eureka/
一起使用 .eureka-service
是eureka
实例的别名 .例如,您可能有application.yml用于服务
docker-compose的示例 . Docker-compose将为所有服务创建一个网络
Full github example
Question 2: :为此我会使用一些网关 . 例如,能够将请求分发给某些微服务的代理 . The API Gateway Pattern(基于Zuul代理) . 使用eureka在一个网络内的服务将确定每个服务使用哪个端口 .
在上面的例子中,他们也使用zuul网关 . 使用网关,您不需要为每个微服务公开端口 . 而且你可以有一些附加的监控和安全性 .