在这篇文章《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
commit的时候信息network写成了netword无视就好 哈哈
增加-forceServiceIp
可以强制使用指定IP,比如在docker swarm中,我可以强制指定为指定的IP,这样就不会变为集群内部网络的IP,在开发环境使用可以方便开发在本地远程调用consul中的服务.
Service registry bridge for Docker.
Registrator automatically registers and deregisters services for any Docker container by inspecting containers as they come online. Registrator supports pluggable service registries, which currently includes Consul, etcd and SkyDNS 2.
Full documentation available at http://gliderlabs.com/registrator
Get the latest release, master, or any version of Registrator via Docker Hub:
$ docker pull gliderlabs/registrator:latest
Latest tag always points to the latest release. There is also a :master
tag
and version tags to pin to specific releases.
The quickest way to see Registrator in action is our Quickstart tutorial. Otherwise, jump to the Run Reference in the User Guide. Typically, running Registrator looks like this:
$ docker run -d \
--name=registrator \
--net=host \
--volume=/var/run/docker.sock:/tmp/docker.sock \
gliderlabs/registrator:latest \
consul://localhost:8500
Usage of /bin/registrator:
/bin/registrator [options] <registry URI>
-cleanup=false: Remove dangling services
-deregister="always": Deregister exited services "always" or "on-success"
-internal=false: Use internal ports instead of published ones
-ip="": IP for ports mapped to the host
-resync=0: Frequency with which services are resynchronized
-retry-attempts=0: Max retry attempts to establish a connection with the backend. Use -1 for infinite retries
-retry-interval=2000: Interval (in millisecond) between retry-attempts.
-tags="": Append tags for all registered services
-ttl=0: TTL for services (default is no expiry)
-ttl-refresh=0: Frequency with which service TTLs are refreshed
Pull requests are welcome! We recommend getting feedback before starting by opening a GitHub issue or discussing in Slack.
Also check out our Developer Guide on Contributing Backends and Staging Releases.
Big thanks to Weave for sponsoring, Michael Crosby for skydock, and the Consul mailing list for inspiration.
For a full list of sponsors, see SPONSORS.
MIT