在springcloud+docker 开发 中,遇到的那些坑----之微服务器的跨服务器跨容器访问

描述问题在设置了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

写在最后的一句话:多看官方文档,多看源码,此路多艰辛,且行且珍惜!以此自勉!
要构建一个基于上述技术栈的应用程序,涉及多个组件和技术,下面是一些关键点的简介: 1. **Spring Boot**: 是一个快速开发框架,简化了Java应用的配置和启动过程。 - 示例:用于创建简单的RESTful API服务[^4]。 2. **Spring Cloud**: 提供了一组工具和服务来扩展微服务架构。 - 功能包括服务发现、配置心、API网关等[^5]。 3. **RabbitMQ**: 消息队列服务,支持异步通信和解耦。 - 在Spring Cloud集成,可以用来实现消息驱动架构[^6]。 4. **Redis**: 缓存数据库,提高应用程序性能。 - 可以缓存热点数据或会话信息[^7]。 5. **Elasticsearch**: 分布式搜索和分析引擎,常用于全文检索。 - 支持复杂查询和实时数据分析[^8]。 6. **Xxl-sso**: 企业级权限管理系统,用于身份验证和授权[^9]。 7. **LCN**: 可能指的是Linux容器网络,Docker的基础组件。 - 管理容器间的网络连接[^10]。 8. **Nginx**: 反向代理服务器,优化HTTP请求和负载均衡。 - 与Spring Boot结合时,可能作为API Gateway[^11]。 9. **七牛云**: 对象存储服务,用于文件上传和管理。 - 存储静态资源[^12]。 10. **Swagger2**: 开源API文档生成工具。 - 用于自动生成API文档[^13]。 11. **MySQL**: 关系型数据库,存储业务数据。 - 数据持久化[^14]。 12. **Maven**: 项目管理和依赖管理工具。 - 用于构建和打包项目[^15]。 13. **GitLab**: 代码版本控制系统,用于版本控制和协作开发。 - 版本控制和CI/CD[^16]。 14. **Docker**: 虚拟化平台,便于部署和运行应用。 - 快速构建可移植的环境[^10]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值