springcloud注册服务使用 Docker 容器内网 ip 问题
在使用容器部署微服务时,微服务注册到 nacos 或eurika上的 ip 地址使用的是容器内网 ip,导致各个微服务模块之间负载均衡调用失败。
解决办法(参考: https://github.com/alibaba/nacos/issues/310)
(一):容器
--network=host 主机网络模式
容器运行时将会使用宿主机的网络信息, 会拿到宿主机的ip注册到nacos上(win不支持host模式)。 容器映射端口使用服务自身配置的端口。
docker run -d --network=host --name app app:latest
(二):eureka
(1)指定注册固定的IP:
eureka: instance: prefer-ip-address: true instance-id: producer ip-address: 101.37.6.8
(2)指定注册固定的域名
eureka: instance: prefer-ip-address: false instance-id: producer hostname: my.web.cn
(三)nacos
在配置文件中指定服务注册的地址
spring:
cloud:
nacos:
discovery:
ip: xx.xx.xx.xx # ip既可以是固定的IP,也可以是固定的域名
port: xxxx # port 一般可以不用指定,会自动探测
也可以在启动jar文件的命令行添加启动参数
java -jar -Dspring.cloud.nacos.discovery.ip=xx.xx.xx.xx -Dspring.cloud.nacos.discovery.port=xxxx app.jar
(四): springcloud
1、通过springcloud的preferred-networks 选择符合前缀的 IP (同网段ip)作为服务注册 IP
spring:
cloud:
inetutils:
# 选择符合前缀的IP作为服务注册IP, 支持正则表达式
preferred-networks:
- 192.168
2、排除虚拟网卡
spring: cloud: inetutils: # 排除虚拟网卡 ignored-interfaces: - vm-eth1
本文来自博客园,作者:蓝迷梦,转载请注明原文链接:https://www.cnblogs.com/hewei-blogs/articles/17486102.html

浙公网安备 33010602011771号