03 容器网络

03 容器网络

文章目录

  • [03 容器网络](#03 容器网络)
    • [一、Docker 原生网络驱动](#一、Docker 原生网络驱动)
    • [二、none 网络](#二、none 网络)
    • [三、host 网络](#三、host 网络)
    • [四、bridge 与 docker0](#四、bridge 与 docker0)
      • [1. docker0 是什么](#1. docker0 是什么)
      • [2. veth pair 通信原理](#2. veth pair 通信原理)
      • [3. 示例](#3. 示例)
    • [五、用户自定义 bridge(user-defined bridge)](#五、用户自定义 bridge(user-defined bridge))
      • [1. 创建网桥](#1. 创建网桥)
      • [2. 启动时加入网络 / 指定静态 IP](#2. 启动时加入网络 / 指定静态 IP)
      • [3. 互通规则](#3. 互通规则)
      • [4. 给运行中的容器追加网卡(跨网桥互通)](#4. 给运行中的容器追加网卡(跨网桥互通))
    • 六、常用网络命令汇总
    • 七、常考判断/选择
    • 八、速记口诀

常考主线:5 种原生网络驱动 → none/host/bridge 三种重点 → docker0 默认网桥 → 自定义网桥与容器互通。

一、Docker 原生网络驱动

Docker 有 5 种原生 Network Driver ;安装时会自动创建 3 个网络:none、host、bridge(docker0)。

驱动 说明 考点
none 只有 lo 回环网卡,无法与外界通信 driver 类型为 null,IPAM 为空;用于不需要网络的后台任务
host 容器直接共享宿主机的 network namespace,网络配置和宿主机完全一样 不再做网络隔离,直接占用宿主机端口,无 -p 映射
bridge 默认驱动,同一台 Docker 宿主机上的容器通信 默认实现就是 docker0 网桥
overlay 基于 Linux 网桥 + VxLAN 实现跨主机容器通信 多用于 Swarm/K8s 多机
macvlan 给容器配 MAC 地址,使其像物理机一样直接接入物理网络,跨主机场景

选择题陷阱:flannel 不是 Docker 原生 network driver(它是 K8s 的网络方案/插件)。

二、none 网络

  • 容器只有 lo 接口,没有对外网卡,IPAM 为空。
  • 完全隔离,不能与外部或其他容器通信。
  • 适用:不需要网络的纯计算/批处理任务,或需要手动精细配置网络的场景。

三、host 网络

  • 容器加入宿主机的 network namespace,共享宿主机的网卡、IP、端口栈。
  • 特点:
    • 网络性能最好(无网桥/NAT 转发开销)。
    • 端口直接用宿主机端口,端口冲突需自己避免。
  • 常考判断:"使用 host 网络时,容器可以使用宿主机上已被占用 的端口对外服务" → 错(F),共享同一端口栈,已占用端口不能再用。

四、bridge 与 docker0

1. docker0 是什么

  • Docker Daemon 首次启动 时自动创建的一个 Linux 网桥(虚拟交换机) ,名字就叫 docker0。
  • 默认网段 172.17.0.0/16,网关一般是 172.17.0.1。
  • 新建容器默认都挂到 docker0 上(默认 bridge 网络)。

2. veth pair 通信原理

  • 每接入一个容器,Docker 会创建一对(两个)虚拟网卡 veth pair :
    • 一端在容器内(通常叫 eth0);
    • 另一端在宿主机上,接入 docker0 网桥。
  • 同一网桥下的容器通过 docker0 二层互通;容器访问外网经 docker0 做 NAT(iptables MASQUERADE)。
  • 容器 IP 由 docker0 网段动态分配,网关指向 docker0。

3. 示例

bash 复制代码
docker run --name httpd1 -dit httpd
# 容器网卡 eth0: 172.17.0.2/16,网关 172.17.0.1,NetworkID = docker0 的 ID
docker network ls                 # 列出网络
docker network inspect bridge     # 查看 docker0/bridge 详情(网段、容器、网关)

五、用户自定义 bridge(user-defined bridge)

用户可按需自建网桥,比默认 docker0 更灵活(可指定网段、静态 IP、容器间 DNS 名互通、隔离更好)。

1. 创建网桥

bash 复制代码
# 让 Docker 自动分配网段和网关
docker network create --driver bridge net1

# 手动指定网段和网关
docker network create --driver bridge --subnet 172.10.10.0/24 --gateway 172.10.10.1 net2

2. 启动时加入网络 / 指定静态 IP

bash 复制代码
docker run --name centos1 -dit --network net1 centos
docker run --name centos2 -dit --network net2 centos
# 在 net2 中指定静态 IP(必须在该网桥 subnet 范围内)
docker run --name centos3 -dit --network net2 --ip 172.10.10.10 centos

3. 互通规则

  • 同一网桥 内的容器可以互通;不同网桥 之间默认隔离、不能直接通信 。
    • 例:centos3(net2) 能 ping 通 centos2(net2),ping 不通 centos1(net1)。

4. 给运行中的容器追加网卡(跨网桥互通)

bash 复制代码
docker network connect net2 centos1   # 给 centos1 再加一块网卡接入 net2
docker network disconnect net2 centos1 # 移除
  • 一个容器可同时接入多个网络,从而实现跨网桥通信。

六、常用网络命令汇总

命令 作用
docker network ls 列出所有网络
docker network inspect <网络> 查看网络详情(driver、subnet、gateway、接入容器)
docker network create --driver bridge --subnet --gateway 名 创建网络
docker network connect <网络> <容器> 运行中容器接入网络(加网卡)
docker network disconnect <网络> <容器> 断开网络
docker network rm <网络> 删除网络
docker run --network / --ip 指定网络 / 静态 IP
docker run -p 主机端口:容器端口 端口映射(bridge 下对外发布服务)

七、常考判断/选择

  1. host 网络下容器能用宿主机已占用的端口提供服务 → F(共享端口栈,会冲突)。
  2. 下列不是 Docker 原生 network driver 的是:bridge / overlay / host / flannel → 选 flannel。
  3. Docker 安装后自动创建的 3 个网络:none、host、bridge。
  4. 默认网络驱动是 bridge ,默认网桥是 docker0(172.17.0.0/16)。
  5. 同网桥容器互通,不同网桥默认隔离;docker network connect 可让容器加入第二个网桥实现互通。

八、速记口诀

  1. 五大驱动:none 不通、host 共用、bridge 默认、overlay/macvlan 跨主机;flannel 不是原生驱动。
  2. docker0 = 默认 Linux 网桥,网段 172.17.0.0/16,容器默认挂它。
  3. 容器靠 veth pair 一头进容器、一头接网桥实现互通。
  4. 同网桥通、异网桥隔;要互通就 network connect 加网卡。
  5. host 网络共享宿主机端口栈,被占端口不能再用。
相关推荐
古法老登瞎折腾7 小时前
大数据智能运维实战(十一):运维 MCP 的工程化——权限、限流、审计与错误处理
java·大数据·运维·spring ai·mcp
琥珀.8 小时前
mysql中json数组转列表查询
linux·运维·服务器
dawnsky.liu8 小时前
在 RHEL 中使用 goose 实现远程主机管理
linux·运维·ai
Linux运维技术栈10 小时前
CVE-2026-91403 高危漏洞修复:Rocky Linux 9 多版本 JDK 环境清理实操
java·linux·运维
云上先途110 小时前
企业 AI 服务部署周期多久,会不会影响原有业务运转?
大数据·运维·人工智能
执伞人ONLY11 小时前
AI知识库自动化知识加工没做对,人工整理永远追不上知识产生
运维·人工智能·自动化
叼烟扛炮11 小时前
Linux 学习笔记(三十三):线程互斥——互斥锁(Mutex)与死锁
linux·运维·服务器·笔记·学习·1024程序员节
无足鸟ICT12 小时前
【RHCA+】who命令(查看已登陆用户)
linux·运维·服务器
RacentCLM12 小时前
证书即服务CaaS:从申请、续期到部署的自动化链路拆解
运维·数据库·自动化·ssl
注塑机数据采集联网13 小时前
注塑机生产管控MES系统应用
大数据·运维·服务器·人工智能·物联网