容器如何枚举网络上可用的主机?

How can a container enumerate hosts available on the network?

用例:haproxy 容器 运行 docker 组合。我想让容器发现哪些主机可用,以便重新创建 haproxy 配置并重新加载它。

我知道会有一个或多个名为 server1 和 server2 的容器可用。从 haproxy 容器内部,我可以查询 server1 的 dns 并接收多个 IP 地址。这是知道新的 server1 cointainer 何时可用或死亡的唯一方法吗?我知道我可以在容器中使用 docker api 来自 python 运行 的 docker 主机套接字映射到它,但我不确定这将在 运行 on swarm 时起作用。

完美的解决方案是 api 或让我注册一个事件处理程序的命令,该事件处理程序在新容器加入网络时调用。

有一个解决方案可以使用 Registrator (https://github.com/gliderlabs/registrator)、Consul 和 Consul 模板。

Consul 是一种服务发现 Consul-Template 监视 Consul 并更新 HA Proxy 配置并重新加载它。 注册器监听 Docker 引擎并在有任何容器启动或关闭时更新 Consul。

请看图:

完整教程可以参考我的博客(https://sonnguyen.ws/microservices-with-docker-swarm-and-consul/)了解具体实现方法