在springcloud+docker 开发 中,遇到的那些坑----之微服务器的跨服务器跨容器访问
描述问题在设置了eureka的注册中心地址后,生产者向eureka注册的是一个名字,点击名字后实际地址,这个地址就是docker 生成的ip;用docker命令查看docker inspect f2da20b43ee3"Networks": {"bridge": {"IPAMConfig":
·
描述问题在设置了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的配置;
幸运的是没找到;
在博客中找到一些线索;
推荐像我一样优秀的两篇文章,可以借鉴:
幸运的是,没找到我要的最简方案;
说重点:
通过代码找源码配置
在包>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
写在最后的一句话:多看官方文档,多看源码,此路多艰辛,且行且珍惜!以此自勉!
更多推荐
已为社区贡献1条内容
所有评论(0)