低延迟场景应优先选用host模式,实测容器间延迟可稳定在1–3ms;bridge模式因veth、网桥、nat等环节叠加导致8–12ms延迟;macvlan适用于需独立ip且低延迟的折中场景;overlay因vxlan封装引入额外延迟,不推荐用于低延迟需求。

要让 Docker 网络真正满足特定业务的低延迟传输需求,关键不是套用通用配置,而是根据服务部署边界、通信关系和安全约束做精准分层设计。实测表明,错误的网络模式选择会让容器间 RTT 从 0.3ms 拉高到 20ms 以上,而合理配置可稳定压在 1–3ms 区间。
单机核心服务优先用 host 模式
对数据库代理、实时指标写入器、API 网关等端到端延迟敏感的服务,直接复用宿主机网络栈是最简最有效路径。它绕过 veth pair、docker0 网桥和 iptables NAT,消除全部虚拟转发环节。
- 启动时加 --network host,例如:
docker run --network host -d nginx - 应用必须监听
0.0.0.0:端口,不能只绑127.0.0.1 - 多个容器若需共用同一端口(如都监听 8080),需提前协调或通过反向代理分流
- 配套关闭 Docker 的 iptables 自动管理:在
/etc/docker/daemon.json中加入{"iptables": false},再重启 docker 服务
同机微服务间通信用自定义 bridge 网络
当需要 DNS 自解析、IP 隔离或避免端口冲突,又不愿牺牲太多性能时,自定义 bridge 是平衡点。它比默认 bridge 少一层 SNAT,且支持内网 DNS 直接互通。
- 创建时指定子网和禁外联:
docker network create --subnet 172.20.0.0/16 --internal myapp-net - 容器启动时指定网络:
docker run --network myapp-net --name service-a ... - service-a 可直接
curl http://service-b:8080,无需硬编码 IP 或额外服务发现 - 关闭 IPv6(减少邻居发现开销):
docker network create --ipv6=false ...
跨主机场景慎用 overlay,改用 host + 反向代理或 macvlan
overlay 依赖 VXLAN 封装,在边缘节点或资源受限环境会引入 1–3ms 固定延迟,且故障定位困难。除非必须用 Swarm 调度,否则应规避。
- 若服务拓扑固定、节点数少(≤3),推荐每台宿主机启用 host 模式,再用 Nginx 或 Envoy 做轻量级反向代理对外暴露
- 若业务要求容器拥有真实局域网 IP(如对接已有 ACL 或 DHCP),用 macvlan:
docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=eth0 my-macvlan - macvlan 容器获得物理网段真实 IP,延迟接近 host 模式,同时保留网络层策略可控性
配套调优不可少
网络模式选对只是起点,内核参数和链路层设置直接影响最终延迟表现。
- 调小 MTU:默认 1500 在叠加封装时易触发分片,建议设为 1400(bridge/macvlan 均适用):
docker network create --opt mtu=1400 my-net - 关键 TCP 参数进容器:
--sysctl net.core.somaxconn=65535 --sysctl net.ipv4.tcp_tw_reuse=1 - DNS 解析加速:在 daemon.json 中配置公共 DNS:
{"dns": ["1.1.1.1", "8.8.8.8"]} - 高并发下禁用 conntrack(host 模式适用):
sysctl -w net.netfilter.nf_conntrack_enable=0











