Jhipster 注册表从 Eureka 获取错误 IP(Docker 部署)
Jhipster registry gets wrong IP from Eureka (Docker deploy)
我们遇到以下问题,当部署多个微服务时,有时其中一个随机在注册表中注册的 IP 不正确。我知道 eureka 错误地识别了容器的 IP ...
我们测试了几个像这样 application.yml 配置的解决方案,但我们没有让它正常工作。有什么想法吗?
eureka:
instance:
prefer-ip-address: true
hostname: ${server.address}
ip-address: ${server.address}
我在这里看到了这个解决方案:https://groups.google.com/d/msg/jhipster-dev/n7s7OTgT18E/RtZ3O4hlEwAJ
但是此配置会在字符串值中抛出 "Could not resolve placeholder "server.address"。当我读到这篇文章时,这是有道理的:Reference a key in application.yml
@snowblind 这很可能是 docker 容器网络的问题。实际上,在进行初始注册时,Eureka 仅使用应用程序内部可用的内容。所以它会用 java.net.InetAddress 之类的东西来确定它的地址,然后将这个值传播到注册表以通告如何到达服务。但是在你的情况下,它似乎报告了错误的信息。
因此,首先要确保始终将容器端口映射到同一主机端口。或者,您可以使用 docker 主机网络 (--net=host),以便您的容器与主机共享相同的网络接口。这可以在 docker-compose 中通过将 net: "host"
添加到您的服务描述中来实现。
另一个想法是使用基于主机名的 Eureka 注册,而不是我们默认配置的基于 IP 的注册(prefer-ip-adress = true),但我不能保证它会工作,因为我从来没有自己试了一下,如果要这样做,请参考Eureka docs。
我们遇到以下问题,当部署多个微服务时,有时其中一个随机在注册表中注册的 IP 不正确。我知道 eureka 错误地识别了容器的 IP ... 我们测试了几个像这样 application.yml 配置的解决方案,但我们没有让它正常工作。有什么想法吗?
eureka:
instance:
prefer-ip-address: true
hostname: ${server.address}
ip-address: ${server.address}
我在这里看到了这个解决方案:https://groups.google.com/d/msg/jhipster-dev/n7s7OTgT18E/RtZ3O4hlEwAJ
但是此配置会在字符串值中抛出 "Could not resolve placeholder "server.address"。当我读到这篇文章时,这是有道理的:Reference a key in application.yml
@snowblind 这很可能是 docker 容器网络的问题。实际上,在进行初始注册时,Eureka 仅使用应用程序内部可用的内容。所以它会用 java.net.InetAddress 之类的东西来确定它的地址,然后将这个值传播到注册表以通告如何到达服务。但是在你的情况下,它似乎报告了错误的信息。
因此,首先要确保始终将容器端口映射到同一主机端口。或者,您可以使用 docker 主机网络 (--net=host),以便您的容器与主机共享相同的网络接口。这可以在 docker-compose 中通过将 net: "host"
添加到您的服务描述中来实现。
另一个想法是使用基于主机名的 Eureka 注册,而不是我们默认配置的基于 IP 的注册(prefer-ip-adress = true),但我不能保证它会工作,因为我从来没有自己试了一下,如果要这样做,请参考Eureka docs。