谈谈Docker 默认Bridge网络模式
一、核心定位
Docker 默认网络模式:bridge 桥接模式(自定义网桥原理完全一致)。
核心特性:容器拥有独立网络命名空间,与宿主机网络隔离,通过虚拟设备组网通信。
所有普通容器(未指定--net参数)默认都走这套网络架构,也是Docker端口映射 -p 宿主机端口:容器端口 的底层依赖。
二、三大核心虚拟设备
1. docker0 虚拟网桥
本质:宿主机内核中的虚拟二层交换机,存在于宿主机根网络命名空间。
核心作用:
-
统一接入所有默认模式启动的容器
-
负责宿主机 <-> 容器、容器 <-> 容器之间的二层流量转发
-
自带内网网段(默认
172.17.0.0/16),是容器的网关设备
2. veth pair 虚拟网线(核心关键)
本质:成对出现的虚拟网络设备,是跨网络命名空间的唯一通信通道。
结构(永远是一对一绑定):
-
一端:宿主机侧 veth 设备,挂载在 docker0 网桥上(宿主机根命名空间)
-
一端:容器内 eth0 网卡(容器独立命名空间)
核心特性:流量从一端进入,内核自动无损转发到另一端,无例外。
3. iptables 转发规则
Docker 自动在宿主机生成 NAT 规则,支撑外网/宿主机端口映射功能。
-
DNAT:入站流量,将「宿主机IP:端口」转发为「容器内网IP:端口」
-
SNAT:出站流量,将容器内网IP伪装为宿主机IP,保证回包正常
三、最核心原理:网络命名空间隔离(90%人误解的点)
✅ 事实:Docker 进程确实跑在宿主机上
❌ 误区:同一台机器就可以直接通信
💡 关键:容器拥有独立的网络命名空间
-
宿主机:根网络命名空间,拥有 ens33、docker0、宿主机侧veth
-
容器:全新独立网络命名空间,只有 eth0 网卡
-
两套网络协议栈、网卡、路由表完全隔离,互相不可见
结论:docker0 无法直接转发流量到容器 eth0,必须通过 veth pair 穿墙中转。
四、完整流量链路(外部访问容器 -p 端口映射场景)
场景示例:docker run -p 32768:80 nginx,外部访问 http://192.168.40.180:32768
-
客户端请求:访问宿主机公网IP+端口 192.168.40.180:32768
-
宿主机iptables DNAT:改写数据包目标地址,从「宿主机IP:32768」转为「容器内网IP:80」
-
内核路由转发:识别目标网段为docker0网段,将数据包交给docker0网桥
-
docker0二层转发:查询MAC地址表,找到对应绑定的宿主机侧veth设备
-
veth pair中转:流量从宿主机veth穿透到容器内eth0网卡
-
容器接收请求:eth0将流量交给容器内监听80端口的Nginx服务
五、回包反向链路(容器响应客户端)
-
容器Nginx生成响应数据包,从容器内eth0发出
-
通过veth pair虚拟网线,传回宿主机侧veth设备
-
流量进入docker0网桥,转发至宿主机协议栈
-
宿主机iptables SNAT规则:伪装源地址为宿主机公网IP
-
通过宿主机物理网卡ens33,返回给客户端
六、极简一句话终极总结(面试直接背)
Docker 默认 bridge 模式下,外网端口映射流量经过 iptables 地址转换后,交由 docker0 网桥转发,通过 veth pair 跨命名空间穿透,最终送达容器内部服务,实现宿主机与隔离容器的网络通信。
七、拓展对比:Host网络模式(无网桥、无veth)
当容器使用 --net=host 时:
-
不创建独立网络命名空间,容器直接复用宿主机整套网络栈
-
无需 docker0 网桥、无需 veth pair 虚拟设备
-
直接监听宿主机物理端口,网络无隔离、性能更高,但安全性更低
八、核心知识点速记表
|
设备/规则 |
核心作用 |
是否跨命名空间 |
|---|---|---|
|
docker0 |
虚拟交换机,负责容器流量二层转发 |
否(仅宿主机内部) |
|
veth pair |
穿墙虚拟网线,连接宿主机与容器网络 |
是(唯一通道) |
|
iptables NAT |
端口映射、地址转换,支撑外网访问容器 |
否(宿主机内核规则) |
更多推荐

所有评论(0)