支撑复杂容器架构的关键是选对网络模式:默认bridge仅适合单容器试跑,生产环境应以自定义bridge为基座,按业务域划分网络并用容器名通信;跨主机用overlay,特殊场景才用host或macvlan。

要支撑复杂容器架构,关键不是堆叠功能,而是选对网络模式、建好隔离边界、用好服务发现。默认 bridge 网络只适合单容器试跑,一上生产就暴露 DNS 缺失、IP 不稳定、跨服务难管理等问题。真正可靠的做法是:以自定义 bridge 为基座,按业务域划分网络,用容器名通信,再按需叠加 overlay 或 host 模式补足性能或跨主机需求。
用自定义 bridge 网络打牢基础
这是绝大多数多容器应用(如 Web + API + DB + Redis)的首选方案。它自动提供 DNS 解析、网络隔离和子网控制,避免了默认 bridge 的硬伤。
- 创建带子网和网关的网络:docker network create --subnet=10.20.0.0/16 --gateway=10.20.0.1 app-net
- 启动容器时显式加入该网络:docker run -d --name api --network app-net -p 3000:3000 my-api
- 同网络内容器可直接用名字通信:curl http://api:3000/health(无需查 IP,不依赖启动顺序)
按业务逻辑拆分网络实现安全隔离
不要把所有服务塞进一个网络。比如前端、后端、数据库、监控应分属不同网络,只在必要处打通。
- 创建多个专用网络:docker network create frontend-net、docker network create backend-net、docker network create db-net
- 让 API 容器同时接入 backend-net 和 db-net:docker run -d --name api --network backend-net --network db-net my-api
- 前端容器只连 frontend-net 和 backend-net,完全隔离数据库网络
跨主机通信优先选 overlay 网络
当服务分散在多台物理机或云节点上,overlay 是 Docker 原生支持的解决方案,不需要额外装插件,自带服务发现和负载均衡。
- 先初始化 Swarm 集群:docker swarm init
- 创建 overlay 网络:docker network create -d overlay --attachable my-overlay(加 --attachable 允许独立容器接入)
- 在任意节点启动服务并指定网络:docker service create --network my-overlay --name web nginx
- 同一 overlay 网络内的容器,无论在哪台主机,都能通过服务名互通
特殊场景才启用 host 或 macvlan
host 模式绕过 Docker 网络栈,性能高但牺牲隔离;macvlan 让容器拥有物理网络真实 MAC 地址,适合需直连二层网络的设备模拟或工业网关场景。
- 压测类容器可用 host:docker run --network host -d jmeter:latest
- IoT 边缘节点模拟用 macvlan:docker network create -d macvlan --subnet=192.168.5.0/24 --gateway=192.168.5.1 -o parent=eth0 iot-net
- 两者都不提供跨容器 DNS,需靠 IP 或外部服务注册中心协调


















