前言

开发环境下,没有使用docker swarm 方式部署,没有问题。但是线上的生产环境使用了docker swarm做了集群,网络方式使用了 overlay方式 ,这样造成一个问题,如果容器中的服务向eureka注册时,ip地址获取到的永远都是第一张网卡的ip,这样造成的问题就是使用feign无法访问容器服务,但是容器间ping的通。


文章目录

  • 前言
  • 解决办法
  • yml 配置解决
  • 忽略特定网卡
  • 优先使用ip
  • docker compose 配置解决
  • 忽略特定网卡
  • 优先使用ip


解决办法

yml 配置解决

必须在bootstrap.yml文件中添加配置才能生效,在application.yml中添加无效!

忽略特定网卡

spring:
  cloud:
    inetutils:
      ignoredInterfaces: //匹配正则表达式忽略
        - docker0
        - veth.*

优先使用ip

spring:
  cloud:
    inetutils:
      preferredNetworks: //匹配正则表达式优先使用ip段,list配置 从上到下找,找到哪个用哪个
        - 192.168
        - 10.0

docker compose 配置解决

忽略特定网卡

....
environment:
   - spring.cloud.inetutils.ignoredInterfaces=docker0,veth.*
....

优先使用ip

....
environment:
   - spring.cloud.inetutils.preferredNetworks=192.168,10.0
....