我将我的 Spring Boot 应用程序 dockerize 并部署到 Docker Swarm。
如果我不发布我的应用程序公开的端口,那么 Eureka 客户端会将主机名作为实例的地址发送,例如 http://ecf28bdd26c5:8080
- 不错
如果我发布端口(使用 Docker 的 --publish
参数),那么它会使用 IP 注册,例如 http://10.255.0.25:8080
- 坏
即使我明确设置 eureka.instance.prefer-ip-address=false
也会这样做.
如何强制 Eureka 客户端真正使用主机名?
最佳答案
通过显式设置主机名 eureka.instance.hostname=${SOME_VAR}
或忽略某些接口(interface):
来自 documentation :以下配置将忽略“docker0”接口(interface)和所有以“veth”开头的接口(interface)。
application.yml
spring:
cloud:
inetutils:
ignoredInterfaces:
- docker0
- veth.*
您还可以使用正则表达式列表强制仅使用指定的网络地址:
application.yml
spring:
cloud:
inetutils:
preferredNetworks:
- 192.168
- 10.0
关于docker - 当 Docker 容器发布端口时,应用程序使用 IP 而不是主机名在 Eureka 中注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45594565/