繁体   English   中英

为什么部署在Docker容器上的Spring Cloud Netflix应用程序需要显式设置eureka.instance.hostname?

[英]Why do Spring Cloud Netflix applications deployed on Docker containers require explicitly setting eureka.instance.hostname?

一个简单的场景:

部署在localhost上的一切都按预期工作。

我将它们停靠在每个应用程序的各个容器上运行,并通过Windows在Docker上进行测试。

我在部署(config server,zull和b-ms)后看到的是,如果我没有为每个人指定eureka.instance.hostname ,他们会在无效的URL中注册Eureka服务器 这使得他们无法互相呼叫,因为他们获得了无效的URL。

例如:

CONFIGSERVER    n/a (1) (1) UP (1) - 287dd3ada410:configserver:8888

287dd3ada410:configserver:8888分在287dd3ada410:8888/info 这不存在。

解决这个问题,我必须添加到configserver的application.yml(和其他应用程序的等价物):

eureka:
  instance:
    hostname: config-server

现在它出现在尤里卡这样:

CONFIGSERVER    n/a (1) (1) UP (1) - c99cdfe9bd01:configserver:8888

并且c99cdfe9bd01:configserver:8888指向http://config-server:8888/info ,现在可以正确解析配置服务器。

为什么有必要为每个服务使用eureka.instance.hostname 他们为什么不注册他们的IP:端口,因为没有Docker运行时( c99cdfe9bd01:configserver:8888 -> 192.168.99.100:8888 )?

我相信每个Docker容器都需要使用映射到容器端口的Docker主机IP和Docker主机端口进行注册。

这就是我用过的:

尤里卡实例:

docker run -idt -p 8001:8001 --net=host -e spring.profiles.active=peerAware -e appPort=8001 -e hostName=$HOSTNAME -e dataCenter=asimio-cloud-dal -e environment=staging -e peerUrls="http://$HOSTNAME:8002/eureka/" asimio/discovery-server:1.0.73

服务实例:

docker run -idt -p 8601:8601 --net=host -e appPort=8601 -e hostName=$HOSTNAME -e eureka.client.serviceUrl.defaultZone="http://$HOSTNAME:8001/eureka/,http://$HOSTNAME:8002/eureka/" asimio/demo-registration-api-2:1.0.21

http://tech.asimio.net/2016/11/14/Microservices-Registration-and-Discovery-using-Spring-Cloud-Eureka-Ribbon-and-Feign.html#running-the-discovery-server-and-演示服务功能于泊坞窗的容器

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM