一个简单的场景:
我将它们docker化为每个应用程序运行在单独的容器中,并在Windows上测试。
部署后(配置服务器、zull和b-ms),如果我没有为它们每个指定
例如:
为了解决这个问题,我不得不在 configserver 的 application.yml(以及其他应用程序的等效文件中)添加以下内容:
现在它在 Eureka 中显示如下:
- 2个eureka服务器 (http://archimedes1 http://archimedes2)
- 1个配置服务器
- 1个Zull网关
- 1个业务微服务
我将它们docker化为每个应用程序运行在单独的容器中,并在Windows上测试。
部署后(配置服务器、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
现在它在 Eureka 中显示如下:
CONFIGSERVER n/a (1) (1) UP (1) - c99cdfe9bd01:configserver:8888
而 c99cdfe9bd01:configserver:8888
指向 http://config-server:8888/info
,现在正确地解析了配置服务器。
为什么每个服务都需要使用eureka.instance.hostname
?为什么不像在没有 Docker 的情况下运行时那样使用 IP:端口进行注册 (c99cdfe9bd01:configserver:8888 -> 192.168.99.100:8888
)?