Docker原生负载均衡有四种方案:①Swarm ingress模式,基于IPVS内核转发,实现跨节点自动分发与秒级故障恢复;②自定义bridge+DNS轮询,适合单机多容器轻量场景;③Docker 27 eBPF LB,内核级低延迟转发,支持HTTP/2健康探针;④Nginx七层代理,补足会话保持、TLS卸载等高级策略。

直接用 Docker 原生能力就能实现轻量、可靠、低延迟的负载均衡与高可用,关键不在加中间件,而在选对网络模式、配对服务发布方式、用好内建调度机制。
用 Swarm ingress 模式做跨节点自动分发
这是最接近“开箱即用”的高可用方案。Swarm 会在所有管理节点和工作节点上自动部署 ingress 网络,并基于 IPVS 在内核层完成四层转发。
- 部署服务时显式启用 ingress 模式:
docker service create --name api --publish published=8080,target=80,mode=ingress nginx:alpine - 请求无论打到哪个集群节点的 8080 端口,都会被透明路由到任一健康副本,无需关心容器实际运行在哪台机器上
- 节点宕机时,IPVS 规则自动剔除失效路径,剩余节点继续承接流量,RTO 通常在秒级以内
用自定义 bridge 网络 + DNS 轮询实现同机多实例分担
适合单机多容器、无编排工具的轻量场景,依赖 Docker 内建 DNS 和客户端重试逻辑达成软性负载均衡。
- 创建独立网桥:
docker network create app-net - 启动多个同名服务容器并接入该网络:
docker run -d --name web --network app-net -p 8080:80 nginx(重复执行多次) - 容器内通过服务名
web访问时,Docker DNS 每次返回不同容器 IP,配合应用层重试(如 HTTP 客户端自动重连),自然形成轮询效果
用 Docker 27 eBPF 原生 LB 提升性能与可观测性
适用于对延迟敏感、需细粒度健康控制的生产环境。它把负载均衡下沉到内核,绕过用户态代理,P99 延迟压降至 0.35ms 级别。
- 必须使用 Docker 27+,并在自定义网络中显式启用:
com.docker.network.driver.overlay.lb_mode: "ebpf" - 搭配
endpoint_mode: dnsrr(DNS 轮询)或endpoint_mode: vip(虚拟 IP)均可,但后者更利于客户端复用连接 - 支持 HTTP/2 健康探针,能识别 gRPC 流状态,比传统 TCP 探活更能反映真实服务能力
用 Nginx 容器做七层代理补足高级策略
当需要会话保持、URL 路由、TLS 卸载或限流时,Nginx 仍是灵活可靠的补充选择,且与 Docker 集成简单。
- 让 Nginx 容器与后端服务处于同一自定义网络,直接用服务名通信:
upstream backend { server web1:80; server web2:80; } - 通过
proxy_next_upstream error timeout http_500实现自动故障转移 - 用
ip_hash或hash $cookie_sessionid consistent维持会话粘性,避免登录态丢失


















