SpringCloud 解决 Docker 镜像 虚拟机网卡导致的IP 不准确的问题
Spring Cloud 应用可能会使用 InetAddress.getLocalHost().getHostAddress()
或类似方法来获取当前机器的 IP 地址。
但在 Docker 容器环境中,这种方法可能会返回容器内部的 IP 地址,而不是宿主机的 IP 地址。
分布式应用部署到服务上,由于服务器可能存在多张网卡,造成IP地址不准。
出现这种问题的原因是当前机器有多个网卡(如有虚拟网卡)造成的,SpringBoot在获取IP的时候无法获取到正确的IP,在实际生产环境中服务器本身也有多块网卡,SpringBoot启动时只能选择一个IP,能否通过简单的配置就能解决这个问题呢?答案是,可以的,SpringBoot本身自带这种功能。
SpringBoot提供了三种配置方式,可以单独使用,也可以混合使用。
一、配置忽略网络接口
使用Docker中运行SpringBoot服务时,服务注册的时候,可以忽略掉一些指定名称的网络接口,想要忽略的网络接口的名称可以使用正则表达式来配置。
下面的配置就是忽略名称为docker0
网络接口和所有名称以veth
开头的网络接口:
application.yml
spring:
cloud:
inetutils:
ignoredInterfaces:
- docker0
- veth.*
二、配置使用指定网络接口
相反,也可以使用正则表达式配置只使用指定的网络接口地址。
下面配置的例子就只使用192.168开头和10.0开头的ip地址,其他的地址都不会使用。
bootstrap.yml
spring:
cloud:
inetutils:
preferredNetworks:
- 192.168
- 10.0
三、配置使用site-local地址
如果SpringBoot服务只是在局域网内使用,不会被外部调用的话,就可以使用site-local方式配置,配置方式如下:
application.yml
spring:
cloud:
inetutils:
useOnlySiteLocalInterfaces: true
END.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库