问题描述
在这篇文章《Docker Swarm Mode中部署SpringCloud微服务》之后
遇到了点新问题。
在运行时指定自己网络的时候,容器里面多个网络,多个IP,但是注册的不是固定注册某个网卡的IP作为服务IP。
这就导致有时候注册的IP不是属于overlay网络的IP。服务访问就会出现问题。
如果是用rencher部署的话,它有一个label记录了容器IP。可以用registrator
的-useIpFromLabel
读取它label。而docker swarm并没有记录相关IP到label 也就不能用这个参数。
所以我fork了registrator的最新源码,做了点修改。让它支持可以传入在运行docker时,attach的network名字,根据这个网络名字在它container信息中取得它IP。
如我前面运行docker的服务的时候指定--network=micro-service
那么我运行registrator
的时候,用我修改过的镜像doubleshit/registrator:v7
指定-useIpFromNetworkName=micro-service
参数即可。
如:
docker run -d \
--restart=always \
--name=registrator \
--net=host \
--volume=/var/run/docker.sock:/tmp/docker.sock \
doubleshit/registrator:v7 \
-cleanup \
-internal \
-ip <NODE_IP> \
-useIpFromNetworkName=micro-service \
consul://<NODE_IP>:8500
修改后的源码:https://github.com/onecer/registrator
commit的时候信息network写成了netword无视就好 哈哈
贴这个博客纯粹是因为比较容易让遇到问题的同志在搜索的时候比较容易找到。但是有时候后期文章做了改动 我不一定会更新这里。