解决SpringBoot在Docker运行注册IP不正确的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决SpringBoot在Docker运行注册IP不正确的问题相关的知识,希望对你有一定的参考价值。

参考技术A 在开发中经常会碰到SpringBoot应用在启动成功以后,发现注册到注册中心的IP不是自己想要的。实际开发联调的时候也经常碰到自己本地启动应用怎么获取到一个怪怪的IP,通过别的机器无法连接到这个IP。发现有虚拟机的时候,就把虚拟机网卡停掉,然后才能获取本地局域网IP。当然也可以每个服务都指定IP的方式来解决这个问题,只有几个实例还可以,但是有几十或者上百个实例如何解决呢?

出现这种问题的原因是当前机器有多个网卡(如有虚拟网卡)造成的,SpringBoot在获取IP的时候无法获取到正确的IP,在实际生产环境中服务器本身也有多块网卡,SpringBoot启动时只能选择一个IP,能否通过简单的配置就能解决这个问题呢?答案是,可以的,SpringBoot本身自带这种功能。

SpringBoot提供了三种配置方式,可以单独使用,也可以混合使用。

使用Docker中运行SpringBoot服务时,服务注册的时候,可以忽略掉一些指定名称的网络接口,想要忽略的网络接口的名称可以使用正则表达式来配置。下面的配置就是忽略名称为docker0网络接口和所有名称以veth开头的网络接口:

相反,也可以使用正则表达式配置只使用指定的网络接口地址,下面配置的例子就只使用192.168开头和10.0开头的ip地址,其他的地址都不会使用。

如果SpringBoot服务只是在局域网内使用,不会被外部调用的话,就可以使用site-local方式配置,配置方式如下:

以上是关于解决SpringBoot在Docker运行注册IP不正确的问题的主要内容,如果未能解决你的问题,请参考以下文章

Spring Cloud Consul如何注册外部IP?

docker运行Spring Cloud使用外部IP

@EnableDiscoveryClient spring Boot 服务注册

带有 Spring Boot 的 Docker 和 Eureka 无法注册客户端

Nacos微服务注册地址为Docker内网IP的解决办法

超详细Docker部署SpringBoot+Vue项目(三更博客项目部署)