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 网络共享宿主机端口栈,被占端口不能再用。
相关推荐
程序员-Benothing1 小时前
Linux查找文件命令:find、locate、which、whereis实战
linux·运维·服务器
团子股股东峥哥1 小时前
day39-RHEL-访问网络附加存储
linux·运维·服务器
论文复现现场1 小时前
课程作业要跑 PyTorch 训练,学校机房不够用去哪租?云 GPU 选型、环境迁移与防丢数据指南
人工智能·pytorch·深度学习·云计算·gpu·cuda
名字还没想好☜2 小时前
Kubernetes 用 kubectl port-forward 和 proxy 调试集群内服务:两者区别、断连自动重连与为什么别用在生产
运维·docker·kubernetes
程序员-Benothing3 小时前
Linux文件查看与编辑:cat、less、tail、vim快速入门
linux·运维·服务器
考虑考虑9 小时前
docker compose V2版本新属性
运维·后端·自动化运维
小小的木头人11 小时前
Ubuntu Samba修改端口绕过445封禁挂载
运维·ubuntu
ai小陈11 小时前
CUDA Stream实战:让数据传输与GPU计算真正重叠
人工智能·深度学习·ai·pdf·云计算·gpu算力
武汉唯众智创11 小时前
云计算实训室建设指南(2026版):从技能大赛赛项标准反推架构、课程与落地路径
云原生·kubernetes·云计算·云计算实训室·云计算教学平台·职业技能大赛