解决 Nacos 服务注册使用 Docker 容器内网 ip 问题

18 篇文章 0 订阅
5 篇文章 0 订阅

一、问题

使用 Docker 集群部署的 jar 包启动时,注册到 nacos 上的 ip 会使用 docker 的内网 ip 作为注册地址,导致多台服务器部署服务时,nacos 监听到的服务永远只有一个;

二、解决

参考: https://github.com/alibaba/nacos/issues/310

方法一:使用 --network=host

# 使用 --network=host 主机网络模式, 容器运行时将会使用宿主机的网络信息, 即会拿到宿主机的ip注册到nacos上, 但是win不支持host模式;
# 这个时候我们无需 -p 80:80指定服务端口运行, 因为 --network=host 模式会使用服务本身启用的端口;

docker run -d --network=host --name app app:latest

方法二:使用 nacos 指定注册 ip

# bootstrap.yml配置文件中添加如下配置即可
spring:
  cloud:
    nacos:
      discovery:
        ip: xx.xx.xx.xx
        port: xxxx

方法三:java 程序运行时动态传递 ip 和端口号,原理同方法二

参数:
	-Dspring.cloud.nacos.discovery.ip=xx.xx.xx.xx
	-Dspring.cloud.nacos.discovery.port=xxxx

示例:
	java -jar -Dspring.cloud.nacos.discovery.ip=xx.xx.xx.xx -Dspring.cloud.nacos.discovery.port=xxxx app.jar

方法四: preferred-networks 选择符合前缀的 IP 作为服务注册 IP

spring:
  cloud:
    inetutils:
      # 选择符合前缀的IP作为服务注册IP, 支持正则表达式
      preferred-networks:
      	- 192.168
  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值