带有临时端口的 Spring-cloud brixton、eureka 和 docker

Posted

技术标签:

【中文标题】带有临时端口的 Spring-cloud brixton、eureka 和 docker【英文标题】:Spring-cloud brixton, eureka and docker with ephemeral ports 【发布时间】:2016-12-01 20:09:15 【问题描述】:

我正在使用 spring cloud eureka 在 aws 上的 dockerised 环境中进行微服务注册。

当我使用 dockers 临时端口映射时,容器主机上暴露的端口是未知的。为了克服这个问题,我有一个自定义的EurekaInstanceConfigBean,它会向主机上的 docker 守护进程询问分配的端口,以便我可以使用它向 eureka 注册。

在注册开始之前一切正常。 EurekaDiscoveryClientConfiguration 包含一个 @EventListener(EmbeddedServletContainerInitializedEvent.class) 覆盖我在自定义 EurekaInstanceConfigBean 中分配的外部端口,并将其设置回容器内的本地端口。

我认为侦听器的目的是在 server.port=0 的情况下支持自动端口分配,但在我的设置中它破坏了一些东西。

问题是:我能以某种方式停止EurekaDiscoveryClientConfiguration 以覆盖我手动设置的端口吗?我可以用我自己的EurekaDiscoveryClientConfiguration吗?

【问题讨论】:

【参考方案1】:

您可以使用主机网络,因此 docker 容器使用主机的网络堆栈,这使得服务可以通过其 IP 地址访问。

我通过使用 docker-compose 来使用它。尽管边缘服务用作反向代理(在我的情况下基于 zuul),但这些服务都有随机端口。这些边缘服务有稳定的端口。

【讨论】:

嗨帕特里克,我的问题是在配置 bean 中设置端口,以便我可以在尤里卡注册。无论哪种方式,我现在都用忽略 setNonSecurePort 的版本覆盖了 EurekaInstanceConfigBean 并公开了一个替代设置器 - 有效但感觉有点骇人听闻......

以上是关于带有临时端口的 Spring-cloud brixton、eureka 和 docker的主要内容,如果未能解决你的问题,请参考以下文章

spring-cloud-2.x(服务消费者)

spring-cloud 注册中心配置

spring-cloud: eureka之:ribbon负载均衡配置

Spring-Cloud、Hystrix 和 JPA - LazyInitializationException

spring-boot 指标与 spring-cloud 指标

带有 OpenTracing 的 Spring Cloud Sleuth