docker自定义网络需按需求选驱动并配置参数:bridge用于单机容器通信(支持dns解析),overlay用于跨主机通信(依赖swarm),macvlan使容器直连物理网络;均支持ipam精细化控制。

直接用 docker network create 指定驱动类型,再通过 --network 把容器连进去就行。关键不是“选模式”,而是按需求选驱动 + 配置参数。
bridge 驱动:单机隔离通信最常用
这是最常被用到的自定义网络类型,适合同一台宿主机上多个容器需要互相访问、又不想暴露在默认 bridge 网络里的场景。
- 创建带子网和 IP 范围的桥接网络:
docker network create --driver bridge --subnet 192.168.50.0/24 --ip-range 192.168.50.0/24 my-app-net - 启动容器时指定该网络:
docker run -d --name web --network my-app-net nginx - 容器会自动获得该子网内的 IP,并能通过容器名(如
web)直接 ping 或 curl 其他同网段容器,Docker 内置 DNS 会解析
overlay 驱动:跨主机容器通信必需
要在多台 Docker 主机之间让容器互通(比如 Swarm 集群),必须用 overlay 驱动。它依赖键值存储(如 etcd、Consul)或 Swarm 内置 Raft。
- 需先初始化 Swarm:
docker swarm init - 创建 overlay 网络(自动适用于所有加入集群的节点):
docker network create -d overlay --attachable my-overlay-net
其中--attachable允许独立容器(非 service)接入 - 运行容器时指定:
docker run -d --network my-overlay-net --name db redis - 不同物理机上的容器只要连同一 overlay 网络,就能像在同一个局域网里一样通信
macvlan 驱动:容器直连物理网络
当容器需要像真实物理设备一样拥有独立 MAC 和 IP、直接接入局域网(例如要跑 DHCP 客户端、或被局域网其他设备直接访问),就用 macvlan。
- 注意:宿主机网卡需支持混杂模式,且不能与宿主机 IP 冲突
- 创建示例(绑定到 eth0):
docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=eth0 my-macvlan-net - 容器启动后会从物理子网中分配 IP,可被同网段其他设备直接访问,但默认无法与宿主机通信(需额外配置路由或使用
–mode=bridge)
IPAM 和高级选项:精细化控制地址分配
所有驱动都支持 IP 地址管理(IPAM)配置,用来约束 IP 分配行为。
- 指定固定网关:
--gateway 172.20.0.1 - 预留特定 IP 给关键服务:
--aux-address "db=172.20.0.10" --aux-address "cache=172.20.0.11" - 换用非默认 IPAM 驱动(如集成外部 DHCP):
--ipam-driver dhcp(需提前安装对应插件) - 传驱动专属参数(如 bridge 的 MTU):
--opt com.docker.network.bridge.mtu=1450











