容器

Docker 容器网络深度原理

·6 分钟阅读·2251 字

Docker 网络依托 Linux 内核:**Network Namespace、veth pair、bridge、iptables、路由**。

📋 目录

Docker 容器网络深度原理

1. 前置基础

Docker 网络依托 Linux 内核:Network Namespace、veth pair、bridge、iptables、路由。

  • Network Namespace:实现网络隔离,每个容器独立协议栈(网卡、IP、路由、arp);
  • veth pair:成对虚拟网卡,一端宿主机网桥、一端容器ns; Docker内置5种网络驱动:bridge(默认)、host、none、container、overlay,生产最常用bridge+overlay。

# 查看网络

docker network ls

2. Bridge桥接模式(默认,单机容器互通+外网访问)

2.1. 架构结构

  1. 宿主机自动生成网桥:docker0(linux网桥设备)
  2. 新建容器:创建一组veth pair:vethxxx(宿主机侧) <--> eth0(容器内)
  3. veth宿主机端挂载绑定到docker0网桥;容器eth0落在自身netns。

外网网卡eth0 ←→ 宿主机内核路由/iptables ←→ docker0网桥

                          ↓

               veth pair ←→ 容器eth0(独立ns)

2.2. 三个通信场景

  1. 容器 ↔ 同宿主机其他容器
    经过docker0二层转发,同网段直接互通。
  2. 容器 → 外网互联网
    SNAT:iptables nat表POSTROUTING做源地址转换,容器内网IP→宿主机公网IP出站。
  3. 外网 → 容器(端口映射-p)
    DNAT:-p 宿主机端口:容器端口,iptables PREROUTING把宿主机端口流量转发容器内网IP。 -p 8080:80本质就是iptables DNAT规则。

2.3. 缺点

只能单机互通,跨宿主机容器不能直接通信。

3. Host主机模式

容器不创建独立Network Namespace,直接共用宿主机网络协议栈。

  1. 无docker0、无veth,容器IP=宿主机IP;
  2. 启动端口占用宿主机端口,无需端口映射;
  3. 隔离最弱,性能最好,适合监控类、高性能组件。

docker run --net=host xxx

4. None无网络模式

容器创建独立ns,但不配置任何网卡、IP、路由,完全断网;仅本地磁盘读写,安全隔离场景。


docker run --net=none xxx

5. Container复用容器网络

新容器复用已有容器的Network Namespace,共用一张网卡、同一个IP。

典型场景:sidecar架构(日志采集容器和业务容器共享网络)


# 复用容器id为abc的网络

docker run --net=container:abc xxx

6. Overlay跨主机网络(Swarm集群跨宿主机互通,重点)

6.1. 原理:VXLAN隧道技术(内核封装UDP报文)

  1. 跨宿主机容器不在同一docker0,通过Overlay驱动+VXLAN实现二层互通;
  2. 数据包:容器报文 → 内核封装VXLAN头(UDP 4789端口) → 宿主机网卡 → 对端宿主机解封装 → 目标容器。
  3. 架构分层:
  • 每个节点内部:本地bridge;
  • 跨节点:VXLAN隧道打通二层,所有Overlay容器同网段。 适用:Docker Swarm集群、多机器容器互通。

# 创建overlay跨主机网络

docker network create -d overlay my-over

7. 自定义bridge(生产规范替代docker0)

不使用默认docker0,自建网桥,便于网段规划:


docker network create -d bridge my-bridge

docker run --net=my-bridge xxx

8. 关键内核知识点(面试高频)

  1. veth pair特点:管道型虚拟网卡,一端收、一端发,成对出现;
  2. namespace隔离:容器看不到宿主机真实网卡,内核实现网络资源隔离;
  3. 端口映射底层 = iptables DNAT/SNAT;
  4. Overlay底层=VXLAN,封装在UDP,跨三层网络实现二层互通。

9. Obsidian面试卡片


tags: #Docker #容器网络 #bridge #overlay #VXLAN #面试

题型:原理简答

难度:高级

题目:简述Docker五种网络模式原理与适用场景?

精简答案:

1.bridge默认:docker0网桥+veth pair,单机容器互通,iptables实现端口映射与外网访问;

2.host:共用宿主机ns,无隔离,性能高,共用宿主机IP端口;

3.none:空网络,无网卡,完全隔离断网;

4.container:复用其他容器ns,同IP,sidecar常用;

5.overlay:基于VXLAN隧道,跨宿主机容器二层互通,集群使用。

拓展:bridge靠SNAT/DNAT实现内外网互通,Overlay依靠内核VXLAN封装UDP报文跨机器传输。

易错点:默认docker0是bridge,无法跨主机通信,跨主机需要overlay。

关联:[[Docker 联合文件系统|Docker 联合文件系统 Overlay2]]

关联文档

Yanche Blog

记录云原生、Linux、数据库等技术领域的学习心得,以及日常生活的思考与感悟。

© 2026 Yanche Blog. All rights reserved.

Powered by Astro