![](/img/trans.png)
[英]How should I configure Spring Cloud with Netflix Zuul and Eureka in a Docker contained in an EC2 instance
[英]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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.