Skip to content

一、概述 ​

Docker 默认提供了多种网络驱动模式,用于满足容器之间、容器与宿主机之间以及容器与外网的隔离与通信需求。

使用命令可查看当前环境已有的网络模式:

bash
docker network ls

默认包含三种预设网络:bridge、host、none。生成容器时若不显式指定 --network 参数,默认使用 bridge 桥接模式。

二、四大网络模式原理 ​

1. host 模式 ​

如果启动容器时使用 --network=host,该容器不会获得独立的 Network Namespace,而是直接共享宿主机的网络命名空间。

  • 特点:容器不会虚拟出自己的网卡和独立 IP,而是直接使用宿主机的 IP 和端口。
  • 优缺点:
    • 优势:没有网络虚拟化与 NAT 转换开销,网络性能接近原生;
    • 缺陷:容器内部占用的端口不能与宿主机上已有端口冲突,失去了网络层的强隔离性。

2. container 模式 ​

此模式让新创建的容器和一个已存在的容器共享同一个 Network Namespace,而不是和宿主机共享。

  • 特点:两个容器除了网络栈(IP、端口范围、网卡)共享之外,文件系统、进程列表等依然保持隔离。
  • 通信:处于该模式下的两个容器可以直接通过 localhost / 127.0.0.1 本地回环网络进行高效通信(类似 Kubernetes Pod 中多个容器的协同工作模型)。

3. none 模式 ​

使用 --network=none 启动容器时,Docker 会为容器创建独立的 Network Namespace,但不会进行任何网卡或路由配置。

  • 特点:容器内只有 lo 本地回环网卡,无法访问外网,外界也无法访问容器。
  • 适用场景:适合运行对网络安全要求极高、不需要外部通信的纯批处理任务或离线密码运算任务。

4. bridge 模式(默认桥接模式) ​

bridge 模式是 Docker 的核心与默认实现。

工作流程与底层机制: ​

  1. 虚拟网桥 docker0:Docker 服务启动时,在宿主机上创建一个名为 docker0 的虚拟二层网桥,并分配一段私有子网网段(如 172.17.0.0/16)。
  2. veth-pair 成对网卡:在宿主机与容器之间创建成对的虚拟网卡设备(veth-pair)。一端放在容器内部命名为 eth0,另一端挂载在宿主机的 docker0 网桥上。
  3. 数据包流转:从容器内发出的数据包经由 veth-pair 进入 docker0 网桥,再通过网桥广播与交换送达目标网络设备。
  4. 端口映射与 NAT:使用 docker run -p <host_port>:<container_port> 映射端口时,Docker 会在宿主机的 iptables nat 表中写入 DNAT 规则,实现宿主机端口到容器内私有 IP 的透明转发。

验证容器间连通性:

bash
docker exec -it <container_id_1> ping 172.17.0.3

测试开发工程师 · 专注自动化与系统架构 | 邮箱: hansblog@atumsoul.win