apollo踩坑–各个docker网络设置
一、背景
近期微服务架构中的配置中心选型为携程的apollo。主要基于它诸多有点,类似修改热发布、界面化配置、配置继承、修改和发布可以不同人操作、配置版本管理等。
在config service\admin service\portal service\db几个基础服务,在容器中同一网络构建后,客户端访问meta service,提示报错,无法连接

Long polling failed, will retry in 8 seconds. appId: test001, cluster: default, namespaces: application, long polling url: http://b0d064c77084:6060/notifications/v2?cluster=default&appId=test001&ip=192.168.111.1&notifications=%5B%7B%22namespaceName%22%3A%22application%22%2C%22notificationId%22%3A-1%7D%5D, reason: Could not complete get operation [Cause: b0d064c77084]
其中b0d064c77084为meta service所在容器的主机名

二、解决办法
config service 和 admin service 指定eureka的注册地址为宿主机的ip+port
在每个服务的环境变量中指明,具体为:

apollo-configservice-dev:
environment:
- eureka.service.url=http://apollo-configservice-dev:6060/eureka/
- eureka.instance.home-page-url=http://宿主机ip+configservice端口
apollo-adminservice-dev:
environment:
- eureka.service.url=http://apollo-configservice-dev:6061/eureka/
- eureka.instance.home-page-url=http://宿主机ip+adminservice端口

三、延伸理解
客户端访问meta service,指定的为宿主机ip+port,默认注册中心注册的服务为容器的信息,但是容器信息,客户端时无法直接访问的,所以主要注册宿主机信息,然后通过宿主机和容器的映射,让客户端通过宿主机找到容器服务。
四、参考
apollo github wiki 分布式部署 网络设置

Logo

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

更多推荐