Docker 6大网络模式
一、先搞懂核心:Docker网络的本质
Docker给每个容器都创建了独立的网络命名空间 (相当于给容器装了一套独立的"网络系统",有自己的网卡、IP、路由、端口),不同网络模式,就是给这个"独立系统"选不同的联网方式。
二、6大网络模式 逐个人话拆解
1. bridge 桥接模式(Docker默认模式)
🔍 核心原理
Docker在宿主机里创建一个叫docker0的虚拟网桥(虚拟交换机) ,所有容器通过一对veth虚拟网线,插到这个交换机上,组成一个独立的内网。
🧩 生活化比喻
就像你家的路由器,给每个手机/电脑分配内网IP(比如192.168.1.x),设备之间能互相访问,也能通过路由器访问外网,外网不能直接访问设备,需要端口映射。
✅ 关键特点
- 容器有独立的IP、网络栈,和宿主机、其他容器网络隔离
- 同宿主机的容器通过
docker0网桥互通 - 容器访问外网:宿主机做NAT转发(类似路由器)
- 外网访问容器:必须用
-p 宿主机端口:容器端口做端口映射 - 容器和宿主机互通:通过
docker0的IP(默认172.17.0.1)
🎯 适用场景
- 绝大多数容器应用(Web服务、数据库、微服务等)
- 同宿主机多容器需要互相通信,又要隔离的场景
- 不需要容器直接占用宿主机端口的场景
2. host 主机模式
🔍 核心原理
容器完全共享宿主机的网络命名空间,没有独立的网络栈,容器的网卡、IP、端口都和宿主机一模一样。
🧩 生活化比喻
就像你把电脑直接插在网吧的网口上,用的就是网吧的公网IP和端口,没有自己的内网,完全和主机共用网络。
✅ 关键特点
- 容器没有独立IP,直接用宿主机的IP
- 容器端口直接占用宿主机端口,不需要端口映射
- 网络性能最好,没有NAT转发损耗
- 隔离性最差:容器和宿主机网络完全打通,容器改网络会影响宿主机
- 容器之间端口会冲突(比如两个容器都用80端口,会直接报错)
🎯 适用场景
- 对网络性能要求极高的场景(比如高并发网络服务、网络监控工具)
- 需要容器直接监听宿主机所有网卡的场景
- 单容器部署,不需要端口隔离的场景
- 不适合多容器同端口部署
3. none 无网络模式
🔍 核心原理
容器只有lo回环网卡,没有任何外部网络连接,完全断网。
🧩 生活化比喻
就像一台完全拔掉网线、关掉WiFi的电脑,只能自己和自己通信,连不上任何外部设备,也上不了网。
✅ 关键特点
- 完全隔离,没有任何网络访问能力
- 安全性最高,不会被外部网络攻击
- 容器之间、容器和宿主机、容器和外网都无法通信
🎯 适用场景
- 完全不需要网络的容器(比如本地计算任务、离线数据处理)
- 极致安全的场景,禁止容器任何网络访问
- 自定义网络前的基础环境(比如手动配置网络)
4. container 容器共享模式
🔍 核心原理
新创建的容器直接复用一个已存在容器的网络命名空间,和目标容器共用同一套网络栈、IP、端口。
🧩 生活化比喻
就像两台电脑共用一个路由器的网口,用同一个IP和端口,相当于把两台电脑的网络完全合并成一个。
✅ 关键特点
- 两个容器网络完全互通,localhost就能互相访问
- 共用同一个IP、端口,端口映射只需要在目标容器配置
- 隔离性差:两个容器网络完全打通,互相影响
- 目标容器销毁,新容器网络也会失效
🎯 适用场景
- 多容器协同工作,需要极致网络互通的场景(比如Sidecar代理、日志采集容器)
- Kubernetes的Pod网络(Pod内多个容器共享网络就是这个原理)
- 容器间需要localhost通信,不需要端口映射的场景
5. overlay 覆盖网络模式
🔍 核心原理
基于Docker Swarm/K8s搭建的跨主机容器网络,通过隧道技术(VXLAN),让不同宿主机上的容器,像在同一个局域网里一样互通。
🧩 生活化比喻
就像给多个不同城市的路由器,拉了一条虚拟专线,把所有路由器下的设备,组成一个跨城市的大内网,设备之间直接用内网IP通信,不用管物理位置。
✅ 关键特点
- 跨宿主机容器互通,不需要端口映射、NAT
- 基于加密隧道,安全性高
- 适合集群化部署(Swarm、K8s)
- 配置复杂,需要集群环境支持
🎯 适用场景
- 多主机Docker集群(Swarm、K8s)
- 微服务跨节点部署,需要容器直接互通的场景
- 分布式系统、容器编排平台的基础网络
6. macvlan 网络模式
🔍 核心原理
给容器分配独立的物理MAC地址,让容器直接接入物理网络,拥有和宿主机同网段的真实IP,像一台独立的物理设备。
🧩 生活化比喻
就像给虚拟机分配了一个独立的物理网口,直接插在物理交换机上,和宿主机、其他物理设备在同一个局域网,完全对等。
✅ 关键特点
- 容器有独立MAC、真实物理网段IP,和宿主机平级
- 网络性能接近物理机,没有NAT损耗
- 不需要端口映射,外网直接访问容器IP
- 对物理网络有要求(需要交换机支持混杂模式、 trunk口)
- 每个容器占用一个物理MAC,数量受网卡限制
🎯 适用场景
- 需要容器直接接入物理局域网,被外部网络直接访问的场景
- legacy应用迁移,需要容器拥有真实物理IP
- 网络性能要求高,不需要NAT的场景
- 不适合家用普通路由器(大多不支持macvlan)
三、一张表看懂所有模式的核心区别
| 网络模式 | 独立IP | 端口映射 | 隔离性 | 网络性能 | 跨主机互通 | 适用场景 |
|---|---|---|---|---|---|---|
| bridge(默认) | ✅ 有独立内网IP | ✅ 必须配置 | ⭐⭐⭐⭐ 高 | 一般(有NAT) | ❌ 不支持 | 绝大多数容器应用、多容器隔离 |
| host | ❌ 共享宿主机IP | ❌ 不需要 | ⭐ 极低 | 最好(无损耗) | ❌ 不支持 | 高并发服务、网络监控、单容器部署 |
| none | ❌ 仅回环 | ❌ 无网络 | ⭐⭐⭐⭐⭐ 最高 | 无 | ❌ 不支持 | 离线任务、极致安全场景 |
| container | ❌ 共享目标容器IP | ✅ 仅目标容器配置 | ⭐⭐ 低 | 好(无NAT) | ❌ 不支持 | Sidecar代理、K8s Pod内容器 |
| overlay | ✅ 独立集群内网IP | ❌ 不需要 | ⭐⭐⭐⭐ 高 | 较好(有隧道) | ✅ 支持 | Docker Swarm/K8s集群、跨主机微服务 |
| macvlan | ✅ 独立物理网段IP | ❌ 不需要 | ⭐⭐⭐⭐ 高 | 接近物理机 | ✅ 支持 | 容器接入物理局域网、legacy应用迁移 |
四、怎么选?一句话决策指南
- 90%的场景:直接用bridge模式(默认,不用改,安全又好用)
- 要极致性能、单容器部署:用host模式
- 完全断网、极致安全:用none模式
- 多容器协同、Sidecar代理:用container模式
- 多主机集群、K8s/Swarm:用overlay模式
- 容器要真实物理IP、接入局域网:用macvlan模式
五、补充:常用命令速查
bash
# 查看Docker支持的网络模式
docker network ls
# 运行容器时指定网络模式
docker run -itd --network=bridge # 桥接(默认)
docker run -itd --network=host # 主机模式
docker run -itd --network=none # 无网络
docker run -itd --network=container:容器名/ID # 共享容器网络
要不要我再给你补一份bridge模式的实操配置+端口映射示例,帮你直接上手用?