Skip to content

Docker 网络模式 ​

Docker 提供四种内置网络模式,控制容器与外部网络及其他容器之间的通信方式。

Bridge 模式(桥接) ​

Docker 的默认网络模式。容器通过虚拟网桥 docker0 与宿主机及其他容器通信。

  • 每个容器拥有独立的 Network Namespace
  • Docker 为容器分配独立 IP 地址(默认网段 172.17.0.0/16)
  • 容器通过 veth pair 连接到 docker0 网桥
  • 宿主机通过 docker0 网桥与容器通信
  • 容器间可通过 IP 地址互相访问,但需使用 --link 或自定义网络实现名称解析
  • 适用场景:单机多容器部署、需要容器间网络隔离
text
┌──────────┐  ┌──────────┐
│ 容器 A    │  │ 容器 B    │
│ eth0     │  │ eth0     │
└────┬─────┘  └────┬─────┘
     │ veth        │ veth
     └─────┬───────┘
           │
        docker0 网桥
           │
     宿主机物理网卡
           │
      外部网络

💡 提示:默认 bridge 网络不支持容器名解析,推荐使用 docker network create 创建自定义 bridge 网络,自定义网络内置 DNS,容器间可通过容器名直接访问。

Host 模式(主机) ​

容器直接使用宿主机的网络栈,与宿主机共享网络命名空间。

  • 容器不创建独立的 Network Namespace,与宿主机共享
  • 容器没有独立 IP 地址,直接使用宿主机 IP 和端口
  • 容器内监听的端口直接暴露在宿主机上,无需 -p 端口映射
  • 网络性能最佳,无 NAT 转换开销
  • 端口冲突风险:容器使用的端口不能与宿主机已占用端口冲突
  • 适用场景:对网络性能要求高、容器需直接使用宿主机网络
text
┌──────────────────────┐
│        宿主机         │
│  物理网卡 │ 容器 A   │
│  端口     │ (共享)   │
└─────┬────────────────┘
      │
   外部网络

⚠️ 注意:Host 模式下容器失去网络隔离性,可能带来安全风险,需谨慎使用。

None 模式(无网络) ​

容器拥有独立的 Network Namespace,但不进行任何网络配置。

  • 容器仅有 lo(回环)接口,无其他网络设备
  • 容器无法与外部网络、宿主机及其他容器通信
  • 网络隔离级别最高
  • 如需网络,需手动添加网络设备并配置
  • 适用场景:无需网络的计算任务、安全敏感场景、需自定义网络配置
text
┌──────────┐
│ 容器 A    │
│ lo (仅)  │
└──────────┘

  (无任何外部连接)

Container 模式(容器共享) ​

新容器与指定容器共享 Network Namespace,共用网络栈。

  • 新容器不创建独立网络,而是加入已有容器的网络命名空间
  • 共享 IP 地址、端口范围、路由表等网络资源
  • 共享网络的容器间可通过 lo 接口(127.0.0.1)直接通信
  • 端口冲突风险:共享网络的容器不能监听相同端口
  • 适用场景:Sidecar 模式、多个紧密耦合的容器需共享网络
text
┌─────────────────────────┐
│    共享 Network Namespace │
│  ┌────────┐ ┌────────┐  │
│  │ 容器 A │ │ 容器 B │  │
│  └────────┘ └────────┘  │
│         eth0             │
└───────────┬─────────────┘
            │
         docker0 网桥
            │
      宿主机物理网卡

💡 提示:Kubernetes 中 Pod 内多容器默认使用此模式,同一 Pod 内所有容器共享网络命名空间。

四种模式对比 ​

特性BridgeHostNoneContainer
独立 Network Namespace✅❌✅❌
独立 IP 地址✅❌(共享宿主机)❌❌(共享目标容器)
容器 → 外网✅✅❌✅
外网 → 容器需端口映射直接访问❌需端口映射
容器间通信✅(同网络)✅❌✅(共享 lo)
网络性能一般(NAT)最佳—一般(NAT)
网络隔离性中低高低
端口冲突风险低高无高

常用命令 ​

bash
# 查看所有网络
docker network ls

# 查看网络详情
docker network inspect bridge

# 创建自定义 bridge 网络
docker network create my-net

# 运行容器时指定网络模式
docker run --network bridge   nginx
docker run --network host     nginx
docker run --network none     nginx
docker run --network container:目标容器名 nginx

# 将运行中容器连接到网络
docker network connect my-net 容器名

# 断开容器与网络的连接
docker network disconnect my-net 容器名