解决docker项目部署之Nacos服务注册IP选择

这篇具有很好参考价值的文章主要介绍了解决docker项目部署之Nacos服务注册IP选择。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前段时间为了方便项目的快速部署,我便将其项目部署到了docker中,后来有一次项目调试的时候我发现我在本地启动的项目,无法通过fegin调用我部署在docker里面的服务
解决docker项目部署之Nacos服务注册IP选择

我就立刻去nacos里查看项目的启动情况,突然发现其注册的地址是docker内部的物理机地址
解决docker项目部署之Nacos服务注册IP选择

然后我就去查了一下SpringCloud的官方文档,发现有一项配置如下:

Sometimes, it is useful to ignore certain named network interfaces so that they can be excluded from Service Discovery registration (for example, when running in a Docker container). A list of regular expressions can be set to cause the desired network interfaces to be ignored.
You can also force the use of only specified network addresses by using a list of regular expressions.

翻译出来就是:

有时,忽略某些命名的网络接口很有用,这样就可以将它们从服务发现注册中排除(例如,在Docker容器中运行时)。可以设置正则表达式列表,以忽略所需的网络接口。还可以通过使用正则表达式列表,强制只使用指定的网络地址。

那么怎解决呢?
解决办法很简单就是强制指定物理机的ip选择地址

spring.cloud.nacos.discovery.ip=192.168.1.2

注意后面的ip地址就是我docker所在的服务器ip地址


虽然问题解决了,但是还是要更深入的了解一下这个IP选择的逻辑。翻了一通源码发现,其大致逻辑如下:
解决docker项目部署之Nacos服务注册IP选择

代码思路很简单:
Nacos首先检查有没有ip及networkInterface配置,如果有则使用配置的IP,否则检查networkInterface,并获取IP,如果两者都为空,则使用inetUtils.findFirstNonLoopbackHostInfo().getIpAddress()来获取IP
解决docker项目部署之Nacos服务注册IP选择

而findFirstNonLoopbackHostInfo()的部分逻辑如下:
解决docker项目部署之Nacos服务注册IP选择

它最终会返回一个匹配的IPV4地址,并且排除本机回环网络(127.0.0.0-127.255.255.255),并且匹配是否是首选网络(如果配置了preferredNetworks)。
下面我再说一下另外一个解决方案:preferredNetworks是怎么用的
在springCloud中配置如下:

spring:
  cloud:
	inetutils:
	  preferredNetworks:
		- 192.168
		- 10.0

如果我们是使用的SpringCloud-alibaba注册到Nacos 也有相应的配置:文章来源地址https://www.toymoban.com/news/detail-403094.html

spring.cloud.nacos.discovery.networkInterface=192.168

到了这里,关于解决docker项目部署之Nacos服务注册IP选择的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringCoud+nacos部署在多ip环境下统一nacos服务注册ip

    场景描述 方法 配置固定ip 在springcloud服务下的bootstrap.yml文件中配置 指定ip端口 application.properties下 指定ip端口 spring.cloud.nacos.discovery.ip = 127.0.0.1 spring.cloud.nacos.discovery.port = 8989 配置使用内网前缀的ip spring.cloud.inetutils.preferred-networks=10.25.14 使用前缀为10.25.14的ip比如:10.25.14.12

    2024年02月07日
    浏览(28)
  • 【Java项目】SpringCloud项目注册到Nacos中心时显示的是内网IP导致不同服务器之间无法互相调用接口的解决并发

    微服务项目地址—动动你发财的小手点一个stars吧 出现这个问题是之前我也就遇到过的,这个问题的情况就是: 我们知道微服务项目是可以把不同的项目部署在不同的服务器上从而减少某一台服务器的压力,我们只需要为每一个服务配置一个注册中心即可,然后一个服务需要

    2024年02月16日
    浏览(36)
  • 微服务注册Nacos注册的IP却是内网IP,怎么解决

    我把nacos部署到一台服务器上,然后我在本地运行自己的微服务,中间用了OpenVPN服务来作为桥梁,但是注册到nacos的服务却是内网ip,当时我就炸了,明明有通道你不走,你非得走不通的道!! 下面就是图片展示效果 在我调用这个服务的接口时,那肯定是不通的 解决这个问题也好解决,只

    2024年02月07日
    浏览(27)
  • nacos上注册的SpringBoot项目服务,启动后服务ip地址与本机ip地址不相同

    SpringBoot项目服务启动后,nacos上注册的服务ip地址与本机ip地址不相同,导致服务无法访问 原因:SpringBoot项目注册到注册中心时,会随机访问选取一块网卡的ip地址进行注册。由于本机上存在v8虚拟网卡,导致注册的服务ip是v8虚拟网卡的ip。 虚拟机的V8虚拟网卡会影响到服务的

    2024年02月15日
    浏览(56)
  • 多网卡环境下nacos服务注册IP错误问题解决

    因为电脑装了虚拟机,所以存在多块网卡,服务注册到nacos时默认使用了虚拟机的网卡,导致网关无法将请求路由到正确的服务上。 nacos查看服务的IP地址如下: 实际想使用的IP地址是 127.0.0.1 ,即我本机的IP地址,因为开发环境服务是运行在本机的。 解决办法,直接在nacos的

    2024年02月14日
    浏览(26)
  • 服务注册与发现:Nacos为例 (内附最新版基于Mysql存储Docker Compose部署)

    在现代微服务架构中, 服务注册与发现 中间件已经成为了一个重要的分布式系统协调工具。为什么我们需要这样一个工具?分布式系统需要有效和可靠的工具来管理配置数据、服务发现和协调。 Nacos 作为一体化服务发现与配置管理工具,扮演着服务注册与发现中间件的重要

    2024年02月19日
    浏览(36)
  • Docker部署Nacos注册中心

    1、准备工作 2、添加配置文件 3、运行容器 4、导入Nacos初始化SQL 打开MySQL终端 复制下面SQL语句黏贴到MySQL终端 1、准备工作 2、创建TEST容器,将Nacos的conf目录COPY出来,然后映射到容器里面,方便后续维护管理! 3、运行容器 注意: MYSQL_SERVICE_HOST 变量填写自己MySQL地址,其他都

    2024年02月07日
    浏览(33)
  • Nacos vs Eureka的区别:微服务注册中心的选择

    摘要:本文将详细讲解Nacos和Eureka两个微服务注册中心的区别,并提供代码示例,帮助读者选择合适的注册中心来管理他们的微服务架构。 引言: 在微服务架构中,注册中心是一个关键组件,用于管理和协调各个微服务实例的注册和发现。Nacos和Eureka是两个常见的开源微服务

    2024年02月03日
    浏览(39)
  • Nacos多机部署不同机器间微服务无法调用问题(ip地址设置错误)解决

    我的同一台电脑自己的微服务之间调动是正常的,而且微服务都是正常运行的,但是没法被另一台电脑上的微服务调用:(测试时显示连接超时)  但是服务是正常的:  然后一看服务详情,发现是服务的ip地址变成了虚拟网关的地址:  那么自然另一台机子是连不上的,就

    2024年02月01日
    浏览(30)
  • SpringCloud Nacos服务注册指定注册的ip和端口号

    如果说我们默认不配置注册指定ip和端口号那么会走我们的本地网卡 特殊服务部署可能需要制定注册的ip与端口号 配置文件加上 spring.cloud.nacos.discovery.ip = ip spring.cloud.nacos.discovery.port = 端口 就可以啦

    2024年02月11日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包