overlay网络配合consul实现容器跨主机通信与自动服务发现,核心是通过consul作为分布式键值存储中心,统一管理网络、ip、容器等元数据;各docker daemon注册并监听变更,自动同步网络视图,支持容器名直连通信。

Overlay 网络配合 Consul 实现容器节点自动服务发现,核心在于让各主机上的 Docker Daemon 共享网络与服务元数据,并通过 Consul 作为统一的状态中心完成注册、发现与健康感知。整个过程不依赖手动维护 IP 列表,而是由系统自动同步和更新。
Consul 作为分布式状态中心
Consul 提供键值存储(KV)和 DNS/HTTP API 接口,是 Overlay 网络跨主机协同的“大脑”。Docker 启动时通过 --cluster-store=consul://
- 单节点快速验证可用
progrium/consul镜像启动:docker run -d -p 8500:8500 --name consul consul server -bootstrap -ui - 生产环境建议部署 3 节点 Consul Server 集群,避免单点故障
- 确保 Consul 通信端口开放:8300(RPC)、8301(Serf LAN)、8302(Serf WAN)、8500(HTTP API)、8600(DNS)
Docker 主机接入 Consul 集群
每台运行容器的宿主机需配置 Docker daemon 连接 Consul,并声明自身在集群中的可访问地址。
MiniMax 图片理解 + 网络搜索 MCP 工具。适配 Docker 环境(极空间等),支持图片 OCR 识别、图像内容理解、网络搜索。API Key 安全存储在本地 credentials 文件,不暴露在代码中。
- 修改
/etc/systemd/system/docker.service.d/override.conf,添加以下启动参数: -
--cluster-store=consul://192.168.1.111:8500(指向 Consul Server 地址) -
--cluster-advertise=eth0:2376(指定本机用于集群通信的网卡和端口) - 重启 Docker:
systemctl daemon-reload && systemctl restart docker - 验证是否加入成功:
docker info | grep -i cluster应显示Cluster store: consul://...
创建 Overlay 网络并启用服务发现
Overlay 网络本身即内置服务发现能力——同一网络内的容器可通过容器名或别名直接通信,无需额外配置 DNS 或负载均衡器。
- 在任意已接入 Consul 的节点执行:
docker network create -d overlay mynet - 该命令会将网络元数据(如子网、VNI)写入 Consul,同步至所有节点
- 启动容器时指定该网络:
docker run -d --network mynet --name web nginx - 另一节点上启动的容器(如
curl web)可直接解析web并访问,底层由 Docker 内置 DNS 和 Consul 数据驱动
服务注册与健康检查进阶(可选但推荐)
若需更细粒度的服务治理(例如按标签路由、失败自动剔除),可在容器启动时通过 Consul Agent 主动注册,并绑定脚本健康检查。
- 在各节点部署 Consul Agent(非 Server 模式),监听本地服务
- 使用 Registrator 或自定义脚本,在容器启动后调用 Consul HTTP API 注册服务:
curl -X PUT http://localhost:8500/v1/agent/service/register -d '{"ID":"web-01","Name":"web","Address":"10.0.1.5","Port":80}'- 配合 TTL 或 HTTP 健康检查,Consul 自动标记不健康实例,下游调用方通过 DNS SRV 或 API 查询时自动过滤










