文章目录
- [1. 实战概述](#1. 实战概述)
- [2. 实战步骤](#2. 实战步骤)
-
- [2.1 查看虚拟网桥](#2.1 查看虚拟网桥)
-
- [2.1.1 查看容器信息](#2.1.1 查看容器信息)
- [2.1.2 查看网络接口信息](#2.1.2 查看网络接口信息)
- [2.1.3 安装网桥工具包](#2.1.3 安装网桥工具包)
- [2.1.4 查看虚拟网桥信息](#2.1.4 查看虚拟网桥信息)
- [2.2 网络模式](#2.2 网络模式)
-
- [2.2.1 host模式](#2.2.1 host模式)
-
- [2.2.1.1 host模式概述](#2.2.1.1 host模式概述)
- [2.2.1.2 host模式实战](#2.2.1.2 host模式实战)
- [2.2.2 container模式](#2.2.2 container模式)
-
- [2.2.2.1 container模式概述](#2.2.2.1 container模式概述)
- [2.2.2.2 container模式实战](#2.2.2.2 container模式实战)
- [2.2.3 none模式](#2.2.3 none模式)
-
- [2.2.3.1 none模式概述](#2.2.3.1 none模式概述)
- [2.2.3.2 none模式实战](#2.2.3.2 none模式实战)
- [2.2.4 bridge模式](#2.2.4 bridge模式)
-
- [2.2.4.1 bridge模式概述](#2.2.4.1 bridge模式概述)
- [2.2.4.2 bridge模式实战](#2.2.4.2 bridge模式实战)
- [2.2.5 四种模式对比](#2.2.5 四种模式对比)
- [2.3 容器互联](#2.3 容器互联)
-
- [2.3.1 容器互联概述](#2.3.1 容器互联概述)
- [2.3.2 容器互联实战](#2.3.2 容器互联实战)
- [2.3 容器访问互联网](#2.3 容器访问互联网)
-
- [2.3.1 容器访问互联网概述](#2.3.1 容器访问互联网概述)
- [2.3.2 容器访问互联网实战](#2.3.2 容器访问互联网实战)
- [2.3.3 四种模式访问互联网总结](#2.3.3 四种模式访问互联网总结)
- [3. 实战总结](#3. 实战总结)
1. 实战概述
- 本次实战系统验证了 Docker 四种网络模式(bridge、host、none、container)的特性,包括容器间互联、互联网访问能力及底层网络结构。通过创建自定义网络
hwnet,实现基于容器名的 DNS 通信,并对比各模式在隔离性、性能与连通性上的差异,全面掌握 Docker 网络工作机制。
2. 实战步骤
2.1 查看虚拟网桥
2.1.1 查看容器信息
- 执行命令:
docker ps -a

- 结果说明 :该命令显示了系统中所有容器的运行状态,结果表明有两个容器(web1 和 web3)已成功启动并持续运行。它们均基于
alpine:3.19镜像,执行命令为sleep infinity,状态为"Up",说明容器处于活跃状态,可用于后续网络或服务测试。
2.1.2 查看网络接口信息
- 执行命令:
ip link show

- 结果说明 :该命令显示了系统中所有网络接口的信息,其中
docker0是 Docker 创建的虚拟网桥,处于 UP 状态,MAC 地址为02:42:32:d9:83:c0,用于连接容器与宿主机网络。其下挂载了多个 veth 对(如 veth7eb1d@if42),实现容器与网桥的通信,表明 Docker 网络已正常配置并运行。
2.1.3 安装网桥工具包
- 执行命令:
yum -y install bridge-utils

- 结果说明 :该命令成功安装了
bridge-utils软件包,系统从默认仓库下载并安装了版本为 1.7.1-3.oe2509 的工具包,包含brctl等网桥管理命令。安装过程顺利完成,事务检查与验证均通过,最终提示"Complete!",表明网络桥接工具已就绪,可用于配置和管理 Linux 虚拟网桥。
2.1.4 查看虚拟网桥信息
- 虚拟网桥 :Docker 的虚拟网桥(默认为
docker0)是 Docker 守护进程创建的 Linux 网桥,用于实现容器与宿主机、容器之间的网络通信。每个容器通过 veth 虚拟网卡对连接到该网桥,获得独立 IP 并处于同一二层网络,默认使用 NAT 与外部通信,是 Docker 默认网络驱动(bridge 模式)的核心组件。 - 执行命令:
brctl show

- 结果说明 :该命令成功执行
brctl show,显示当前系统中存在名为docker0的虚拟网桥,其桥接 ID 为8000.024232b983c0,STP(生成树协议)未启用。网桥下挂载了两个 veth 接口:veth0b411c和veth87eb1d,表明 Docker 容器已通过这些接口连接到网桥,实现容器间的网络通信。
2.2 网络模式
2.2.1 host模式
2.2.1.1 host模式概述
- Docker 的
host网络模式下,容器共享宿主机的网络命名空间 ,不创建虚拟网卡或 NAT,直接使用宿主机的 IP 和端口。容器内服务监听的端口即为宿主机端口,网络性能高、延迟低,但失去网络隔离性,且端口易冲突,适用于对性能敏感或需直接暴露服务的场景。
2.2.1.2 host模式实战
-
启动host模式容器
- 执行命令:
docker run -d --name web-host --network host nginx

- 执行命令:
-
查看进程监听端口(无需端口映射)
- 执行命令:
ss -tuln | grep :80

- 结果说明 :该命令显示了宿主机上监听 80 端口的进程,结果表明 TCP 协议下,端口 80 正在监听所有 IP 地址(
0.0.0.0:80和[::]:80),对应 PID 为 511 的进程。结合上下文,此进程即为web-host容器中运行的 Nginx 服务,说明容器已成功以 host 模式启动并绑定宿主机 80 端口,网络通信正常。
- 执行命令:
-
宿主机访问Nginx首页
- 执行命令:
curl http://euler:80

- 执行命令:
curl http://euler,不写端口80

- 执行命令:
-
Windows访问Nginx首页
- 在浏览器里访问
http://euler

- 在浏览器里访问
2.2.2 container模式
2.2.2.1 container模式概述
- Docker 的
container网络模式允许新容器共享另一个已存在容器的网络命名空间,两者共用 IP、端口、路由表等网络资源,如同运行在同一容器中。该模式适用于需要紧密网络协作但隔离文件系统或进程的场景,如 sidecar 代理、调试工具容器等,实现"网络合一、其他隔离"的灵活架构。
2.2.2.2 container模式实战
-
启动主容器(被共享网络的容器)
- 执行命令:
docker run -d --name main-nginx nginx

- 执行命令:
-
启动共享网络的容器
- 执行命令:
docker run -it --network container:main-nginx --name debug-tools alpine:3.19 sh

- 执行命令:
-
验证网络共享效果
- 执行命令:
ip addr

- 执行命令:
wget -qO- http://localhost:80,直接访问localhost:80(即main-nginx服务)

- 结果说明 :输出返回 Nginx 欢迎页 HTML,证明两个容器共享同一网络栈。
- 执行命令:
-
对比独立容器
- 若另启一个普通容器访问
main-nginx,需通过 Docker 虚拟 IP(如172.17.0.x),而container模式可直接用localhost,无需暴露端口或配置链接。
- 若另启一个普通容器访问
2.2.3 none模式
2.2.3.1 none模式概述
- Docker 的
none网络模式为容器禁用所有网络功能 ,不配置网卡、IP 地址、路由或 DNS,仅保留回环接口(lo)。容器完全与外部网络隔离,适用于运行无需网络通信的离线任务、安全敏感型应用或自定义网络栈的场景,是 Docker 中隔离性最强的网络模式。
2.2.3.2 none模式实战
- 启动none模式容器
- 执行命令:
docker run -d --name isolated --network none alpine:3.19 sleep infinity

- 执行命令:
- 验证网络状态
- 执行命令:
docker exec isolated ip addr

- 结果说明 :该命令显示了
isolated容器的网络接口信息,仅存在回环接口lo(127.0.0.1/8 和 ::1/128),无任何物理或虚拟网卡(如 eth0),说明容器处于none网络模式下,完全隔离于外部网络 。此时容器无法访问互联网或被外部访问,仅能进行本地进程通信,验证了none模式"断网"特性。 - 执行命令:
docker exec isolated ping -c2 8.8.8.8

- 结果说明 :该命令尝试在
isolated容器中 ping 8.8.8.8,返回"Network unreachable",说明容器无法访问外部网络。结合其使用none网络模式的配置,验证了该模式下容器完全隔离,无路由、无网关、无对外连接能力,仅保留本地回环接口,符合"断网"设计预期,适用于安全或离线任务场景。
- 执行命令:
2.2.4 bridge模式
2.2.4.1 bridge模式概述
- Docker 的
bridge模式是默认网络模式 ,容器通过虚拟网桥docker0连接宿主机,每个容器拥有独立的网络命名空间、私有 IP 地址(如 172.17.0.x)和虚拟网卡(veth pair)。容器间可通过 IP 通信,对外访问依赖 NAT,外部访问需显式端口映射(-p)。该模式在隔离性与连通性之间取得平衡,适用于大多数单机应用部署场景。
2.2.4.2 bridge模式实战
- 启动 bridge 模式容器(默认即为此模式)
- 执行命令:
docker run -d --name web-bridge -p 8080:80 nginx,未指定--network时,默认使用bridge网络

- 结果说明 :该命令成功启动了一个名为
web-bridge的 Nginx 容器,使用默认的bridge网络模式,并将宿主机的 8080 端口映射到容器的 80 端口。输出中的长字符串为容器 ID,表明容器已创建并运行。后续可通过curl http://localhost:8080访问服务,验证端口映射与网络连通性正常。
- 执行命令:
- 查看网络配置
- 执行命令:
docker inspect -f '{``{range .NetworkSettings.Networks}}{``{.IPAddress}}{``{end}}' web-bridge,查看容器IP地址

- 执行命令:
docker port web-bridge,查看宿主机端口映射

- 结果说明 :该命令显示了容器
web-bridge的端口映射信息,表明容器内 80 端口被映射到宿主机的 8080 端口(IPv4 和 IPv6 均支持)。说明 Docker 已正确配置 NAT 规则,外部可通过http://<宿主机IP>:8080访问容器中的 Nginx 服务,验证了bridge模式下端口映射功能正常。
- 执行命令:
- 验证网络连通性
- 执行命令:
curl http://localhost:8080,从宿主机访问Nginx服务

- 在Windows浏览器里访问
http://euler:8080

- 执行命令:
docker run --rm alpine:3.19 wget -qO- http://172.17.0.5,在另一个容器中通过IP访问该容器

- 执行命令:
- 查看底层网络结构
- 执行命令:
ip addr show docker0,在宿主机上查看docker0网桥

- 执行命令:
ip link | grep veth,查看 veth 接口(连接容器与网桥)

- 结果说明 :该命令输出显示了宿主机上多个
veth虚拟网卡接口,它们是 Docker 容器与docker0网桥之间的连接通道。每个veth接口一端连接容器(在容器内为eth0),另一端挂载到docker0网桥,实现容器与宿主机的网络通信。这些接口的存在验证了 bridge 模式下虚拟网络的构建机制。
- 执行命令:
2.2.5 四种模式对比
| 特性 | bridge | host | none | container |
|---|---|---|---|---|
| 独立 IP | ✅(如 172.17.0.x) | ❌(共享宿主机 IP) | ❌ | ❌(共享目标容器的 IP) |
| 端口映射(-p) | 需显式映射 | 无效(直接暴露) | 不支持 | 无效(共享目标容器端口) |
| 网络隔离 | 中等(独立命名空间) | 无 | 最强 | 与目标容器共享,其他容器隔离 |
| 性能 | 有 NAT 和虚拟网桥开销 | 高(无虚拟化) | --- | 与目标容器一致(无额外开销) |
| 典型用途 | 默认开发/测试环境 | 高性能服务、监控 | 离线任务 | Sidecar、调试工具、网络代理 |
2.3 容器互联
2.3.1 容器互联概述
- Docker 容器互联指多个容器之间通过网络进行通信的能力。默认 bridge 网络下容器可通过 IP 互访,但不支持自动服务发现;推荐使用自定义 bridge 网络,支持容器名 DNS 解析、网络隔离与更佳安全性。互联是构建多服务应用(如 Web + DB)的基础。
2.3.2 容器互联实战
-
创建自定义bridge网络
- 执行命令:
docker network create hwnet

- 执行命令:
-
启动两个容器加入同一网络
-
执行命令:
docker run -d --name db --network hwnet -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0,启动MySQL容器

-
执行命令:
docker run -d --name web --network hwnet alpine:3.19 sleep infinity,启动Web容器

-
-
进入
web容器中访问db- 执行命令:
docker exec -it web sh

- 执行命令:
ping -c4 db

- 结果说明 :该命令在
web容器中执行ping db,成功解析db为 IP 地址172.18.0.2,并完成 4 次 ICMP 请求,往返时间稳定,丢包率为 0%,表明两个容器通过自定义网络hwnet实现了正常通信,验证了 Docker 容器间基于名称的 DNS 解析与网络互联功能有效。
- 执行命令:
2.3 容器访问互联网
2.3.1 容器访问互联网概述
- Docker 容器默认通过 NAT(网络地址转换) 访问互联网:容器流量经
docker0网桥转发,由宿主机内核的 iptables 规则进行 SNAT 转换,源 IP 替换为宿主机 IP 后发出。该机制依赖宿主机的 IP 转发功能和 NAT 规则,适用于 bridge 模式;host 模式直接共享宿主机网络,无需 NAT 即可访问互联网
2.3.2 容器访问互联网实战
- bridge模式访问互联网
- 执行命令:
docker run -it --rm alpine:3.19 sh,启动一个临时容器

- 执行命令:
ping -c4 www.baidu.com,测试互联网连通性

- 结果说明 :该命令在容器中执行
ping www.baidu.com,成功解析域名并返回 IP 地址183.2.172.177,四次 ICMP 请求均收到响应,丢包率为 0%,往返时间稳定,表明容器通过 NAT 模式正常访问互联网,验证了 Docker 默认 bridge 网络下容器对外通信功能正常。
- 执行命令:
- host模式访问互联网
- 执行命令:
docker run -it --rm --network host alpine:3.19 sh

- 执行命令:
ping -c4 www.baidu.com,测试互联网连通性

- 结果说明 :该命令在
host网络模式下运行容器并执行ping www.baidu.com,成功解析域名并返回 IP 地址183.2.172.177,四次请求全部响应,丢包率为 0%,TTL 为 128,表明容器直接使用宿主机网络栈,无需 NAT 即可访问互联网,验证了host模式下网络性能高、连通性良好的特性。
- 执行命令:
- container模式访问互联网
- 执行命令:
docker run -it --network container:main-nginx alpine:3.19 sh

- 执行命令:
ping -c4 www.baidu.com,测试互联网连通性

- 结果说明 :该命令启动一个容器,使用
--network container:main-nginx共享主容器的网络命名空间,并成功执行ping www.baidu.com,返回 IP 183.2.172.177,四次请求均响应,丢包率为 0%,TTL 为 127,表明容器通过共享网络栈正常访问互联网,验证了container模式下网络能力完全继承自目标容器。
- 执行命令:
- none 模式无法访问互联网(验证隔离性)
- 执行命令:
docker run -it --rm --network none alpine:3.19 sh

- 执行命令:
ping -c4 8.8.8.8,测试互联网连通性

- 结果说明 :该命令在
none网络模式下运行容器,执行ping 8.8.8.8时返回"Network unreachable",说明容器无网络接口、无路由配置,完全与外部网络隔离。验证了none模式下容器无法访问互联网,仅保留回环接口,适用于安全或离线任务场景。
- 执行命令:
2.3.3 四种模式访问互联网总结
| 网络模式 | 是否能访问互联网 | 机制 |
|---|---|---|
| bridge(默认) | ✅ 能 | 通过 docker0 + NAT |
| host | ✅ 能 | 直接使用宿主机网络 |
| none | ❌ 不能 | 无网络接口 |
| container | 取决于目标容器 | 共享其网络能力 |
3. 实战总结
- 本次实战深入探究了 Docker 网络核心机制:bridge 模式 通过
docker0网桥和 NAT 实现容器内外通信,默认支持端口映射;host 模式 共享宿主机网络栈,性能高但无隔离;none 模式 彻底断网,适用于安全敏感场景;container 模式 复用目标容器网络,便于调试与 sidecar 架构。通过自定义 bridge 网络hwnet,成功实现容器间基于名称的 DNS 解析与稳定通信,验证了服务发现能力。同时,四种模式对互联网访问行为各异:bridge 和 host 可正常上网,none 完全隔离,container 则继承目标容器的网络能力。实验结果表明,合理选择网络模式对构建安全、高效、可维护的容器化应用至关重要。