描述问题在设置了eureka的注册中心地址后,生产者向eureka注册的是一个名字,点击名字后实际地址,这个地址就是docker 生成的ip;

用docker命令查看

docker inspect f2da20b43ee3

"Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "cfddf9762dd75889c33ec53600b2ae071c3440baf1b1e4be39d8e662274c149d",
                    "EndpointID": "b4e09638261ad269711a799fd6854f8fe5108c63b729e44123146621c59dbddb",
                    "Gateway": "172.172.0.1",
                    "IPAddress": "172.172.0.5",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:03",
                    "DriverOpts": null
                }
            }

打开注册中心

实际点击后

划重点

当我们通过注册中心访问要用的服务时, config-server 会访问一个叫"172.172.0.5"的地址,

那么问题来了,我们容器在局域网中的地址是:192.168.31.86;

在另外一个服务器中

ping 172.172.0.5

PING 172.172.0.5 (172.172.0.5): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
Request timeout for icmp_seq 3
Request timeout for icmp_seq 4
Request timeout for icmp_seq 5

ping不通,就说明是此方法有问题

下面说一下解决方案:

1,第一种是在服务器加路routes
在百度中有很多方案,就是把 172.172.0.0/24 加到本地routes中,局域网内的服务器ping 172.172.0.5,通过了就是设置成功;

2,第二种方法:
为什么讲第二种呢?
因为第一种很复杂,在mac中设置和centos中的设置不一样,简直就是见鬼了,太mmp;
果断弃用;
经第一种设置的累赘后,和各种踩坑到放弃;
决定阅读spingcloud的源码;
找到了eureka 的client的配置;
幸运的是没找到;
在博客中找到一些线索;
推荐像我一样优秀的两篇文章,可以借鉴:

https://www.jianshu.com/p/f229bfcb6c2e

https://blog.csdn.net/xichenguan/article/details/76632033

幸运的是,没找到我要的最简方案;
说重点:
通过代码找源码配置
在包>package org.springframework.cloud.netflix.eureka;
找到

private String ipAddress;

找到setIpAddress

public void setIpAddress(String ipAddress) {
   this.ipAddress = ipAddress;
   this.hostInfo.override = true;
}
突然有一种喜从天降的感觉;

下面看我配置
#指定注册中心地址

eureka:
  client:
    serviceUrl:
      defaultZone: http://192.168.31.86:8761/eureka/
  instance:
#instance-id: ${spring.cloud.client.ip-address}:${server.port}
    instance-id: http://192.168.31.86:${server.port}
    prefer-ip-address: true  


#下面一行就是众里寻她千百度的一行代码
    ip-address: 192.168.31.86

写在最后的一句话:多看官方文档,多看源码,此路多艰辛,且行且珍惜!以此自勉!
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐