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