首页 文章

Docker和Spring Boot

提问于
浏览
1

我们有许多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 回答

  • 2

    Question 1: :您可以为 eureka 容器使用别名,并为所有服务设置一个网络 . 例如,您可以将一个 docker-compose 与所有容器和 defaultZone: http://eureka-service:8761/eureka/ 一起使用 . eureka-serviceeureka 实例的别名 .

    例如,您可能有application.yml用于服务

    client:
        serviceUrl:
          defaultZone: ${eureka_url:http://eureka-server:8761/eureka/}
    

    docker-compose的示例 . Docker-compose将为所有服务创建一个网络

    eureka-server:
        image: eureka-server
        ports:
         - "8761:8761"
    

    Full github example

    Question 2: :为此我会使用一些网关 . 例如,能够将请求分发给某些微服务的代理 . The API Gateway Pattern(基于Zuul代理) . 使用eureka在一个网络内的服务将确定每个服务使用哪个端口 .

    在上面的例子中,他们也使用zuul网关 . 使用网关,您不需要为每个微服务公开端口 . 而且你可以有一些附加的监控和安全性 .

相关问题