当前位置: 首页 > news >正文

Docker 网络模式与通信机制

前言

一、Docker 网络基础原理

1️⃣ 网络命名空间(Network Namespace)

2️⃣ veth pair 虚拟网卡对

3️⃣ Docker 网络命令概览

二、Docker 默认的四种网络模式

2.1 Bridge 模式(默认模式)

2.2 Host 模式

2.3 None 模式

2.4 Container 模式

三、自定义网络

3.1 创建自定义网络

3.2 查看网络详情

3.3 在自定义网络中创建容器

3.4 为容器指定静态 IP

3.5 删除自定义网络

四、容器间通信案例

案例 1:同网络容器互通

案例 2:跨网络容器通信

案例 3:容器访问宿主机

五、Bridge 网络原理解析

5.1 宿主机访问容器原理

六、网络命令速查表

七、网络故障排查

八、总结

前言

在前几章中,我们已经掌握了 Docker 镜像、容器以及生命周期管理。 然而在实际生产部署中,容器之间的网络通信与访问控制 才是真正让容器系统“活起来”的关键。

本篇将深入讲解:

  • Docker 网络的基本原理

  • 四种网络模式(bridge、host、none、container)

  • 自定义网络的创建与容器通信

  • docker0 桥接机制与 IP 分配

  • 常见网络命令与实战案例


一、Docker 网络基础原理

Docker 容器的网络是基于 Linux 的 Namespace(命名空间)veth pair 虚拟网卡对 实现的。

1️⃣ 网络命名空间(Network Namespace)

每个容器都会创建一个独立的网络命名空间,拥有:

  • 独立的网卡(eth0)

  • 独立的 IP 地址

  • 独立的路由表和端口空间

💡 理解方式: 容器之间相互隔离的网络环境,就像不同虚拟机的独立网卡。


2️⃣ veth pair 虚拟网卡对

Docker 使用 veth pair 机制连接容器和宿主机:

  • 一端位于容器内部(eth0)

  • 另一端位于宿主机(vethXXXX)

  • 两端数据传递相互映射

容器eth0 <----> vethxxxx <----> docker0 (bridge)

总结: docker0 是所有容器的默认网桥,相当于“虚拟交换机”。


3️⃣ Docker 网络命令概览

命令说明
docker network ls查看所有网络
docker network inspect <name>查看网络详情
docker network create <name>创建自定义网络
docker network rm <name>删除网络
docker network connect <network> <container>将容器连接到网络
docker network disconnect <network> <container>从网络断开容器

二、Docker 默认的四种网络模式

执行以下命令查看所有网络:

docker network ls

默认输出:

NETWORK ID     NAME      DRIVER    SCOPE
a5f3d...       bridge    bridge    local
c1a9b...       host      host      local
f9a41...       none      null      local

2.1 Bridge 模式(默认模式)

🧩 关键点: 容器通过 docker0 虚拟网桥与宿主机通信。

docker run -d --name web1 nginx

此时容器会自动分配 IP(如 172.17.0.2),通过 docker0 网桥 NAT 到外部访问。

查看容器 IP:

docker inspect -f '{{.NetworkSettings.IPAddress}}' web1

查看宿主机 docker0:

ip addr show docker0

示意图:

[容器 eth0] ↔ [vethxxxx] ↔ [docker0 bridge] ↔ [宿主机 eth0]

适用场景:

  • 默认通信模式

  • 支持跨容器通信(同网络)

  • 支持宿主机访问容器


2.2 Host 模式

容器共享宿主机网络命名空间,不再使用独立 IP。

docker run -d --network host nginx

容器直接使用宿主机的 IP 和端口。

⚠️ 注意:

  • 性能最高,但端口会与宿主机冲突。

  • 适用于高性能、低延迟场景(如监控服务、日志采集)。


2.3 None 模式

完全禁用网络,只保留 loopback。

docker run -d --network none centos sleep 3600

容器无法访问外部,也不能被访问。

💡 用途:

  • 安全隔离测试

  • 手动配置网络场景


2.4 Container 模式

让一个容器共享另一个容器的网络命名空间。

docker run -d --name web1 nginx
docker run -it --name test --network container:web1 centos /bin/bash

test 容器将与 web1 共用 IP、端口、网络栈。

用途:

  • 容器协同工作场景(如 Sidecar 模式)


三、自定义网络

默认 bridge 网络不支持容器名互相解析,因此推荐使用 自定义 bridge 网络

3.1 创建自定义网络

docker network create --driver bridge mynet

3.2 查看网络详情

docker network inspect mynet

输出示例:

"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1",

3.3 在自定义网络中创建容器

docker run -d --name web1 --network mynet nginx
docker run -d --name web2 --network mynet nginx

测试互通:

docker exec -it web1 ping web2

💡 在同一个自定义网络下,容器可通过 容器名 直接通信,无需使用 IP。


3.4 为容器指定静态 IP

docker network create --subnet=172.20.0.0/16 mynet2
docker run -d --name web1 --network mynet2 --ip 172.20.0.10 nginx

验证:

docker exec -it web1 ip addr

3.5 删除自定义网络

docker network rm mynet

⚠️ 必须先删除该网络中的所有容器。


四、容器间通信案例

案例 1:同网络容器互通

docker network create mynet
docker run -d --name app1 --network mynet nginx
docker run -d --name app2 --network mynet nginx

在 app1 内 ping app2:

docker exec -it app1 ping app2

案例 2:跨网络容器通信

可以将容器同时加入两个网络:

docker network connect mynet2 app1

断开连接:

docker network disconnect mynet2 app1

案例 3:容器访问宿主机

宿主机访问容器:

http://localhost:8080

容器访问宿主机(Linux):

ping host.docker.internal

💡 在 Docker Desktop (Windows/Mac) 环境下 host.docker.internal 为宿主机别名。 在 Linux 中可通过 --add-host 参数手动添加:

docker run -d --add-host=host.docker.internal:172.16.0.1 nginx

五、Bridge 网络原理解析

Docker 在安装时会自动创建 docker0 网桥。 查看网桥配置:

brctl show

默认输出:

bridge name bridge id       STP enabled interfaces
docker0     8000.0242a0b14d9f no     veth3a1e2c1

docker0 就是容器网络的“交换机”,veth 对充当“网线”。


5.1 宿主机访问容器原理

宿主机通过 NAT 转发实现访问:

宿主机端口 8080 → docker0 → 容器 IP:80

通过以下命令查看转发规则:

iptables -t nat -L -n

六、网络命令速查表

命令说明
docker network ls查看所有网络
docker network inspect <name>查看网络详细信息
docker network create <name>创建自定义网络
docker network rm <name>删除网络
docker network connect将容器连接到网络
docker network disconnect从网络断开容器
ip addr show docker0查看虚拟网桥 IP
brctl show查看网桥与接口映射

七、网络故障排查

问题检查方向命令示例
容器无法访问外网检查宿主机 NATiptables -t nat -L -n
容器间不互通检查是否同一网络docker inspect 容器名
ping 不通主机检查 DNS 设置cat /etc/resolv.conf
自定义 IP 不生效检查 network 子网配置docker network inspect mynet

八、总结

通过本篇学习,你应掌握以下技能:

✅ 理解 Docker 网络原理与 veth 机制

✅ 熟悉四种网络模式及其适用场景

✅ 掌握自定义网络创建与容器通信

✅ 了解 docker0 桥接机制与 IP 分配

✅ 能进行跨容器、跨网络通信配置

http://www.dtcms.com/a/442752.html

相关文章:

  • 预约优化方案全链路优化实践
  • Linux指令(1)
  • TS学习笔记
  • 上海建设银行官方网站有关网站排名的论文
  • Zabbix对决Prometheus:监控系统终极对比
  • 【ROS2学习笔记】 TF 坐标系
  • 如何给网站绑定域名邢台推广公司
  • AgentLightning浅读
  • 友情链接对网站的作用喜茶vi设计手册
  • 开通企业网站需要多少钱wordpress添加m3u8播放器
  • 广义可逆计算 (Generalized Reversible Computation): 一个软件构造范式的正名与阐释
  • js网站开发视频教程北京自己怎样做网站
  • 稠密检索模型(Dense Retrieval Model)
  • 东莞网站建设员天长网站制作
  • 【精品资料鉴赏】361页word详解绿色智慧校园建设方案
  • 深圳哪家网站建设公司好万江仿做网站
  • 爱空间网站模板淘宝网官方网
  • 在云服务器中下载和使用Navicat连接mysql数据库
  • 优化算法研究Beale函数
  • 用万网做网站龙岗网站建设公司
  • roboguide如何显示或关闭寄存器或 IO 的注释信息
  • 公司电商网站开发方案数学网站建设方法
  • 网站开发与设计实训报告心得营销型网站建设的目标是
  • 建网站没有公司资质wordpress 下载远程图片
  • 网站建设与管理课程的目标织梦+和wordpress
  • 上国外网站哪个dns快网站查询平台官网
  • wordpress建站环境国内网络科技网站建设
  • 2025年渗透测试面试题总结-101(题目+回答)
  • 免费做网站. 优帮云上海公司招聘信息
  • K8s集群CNI升级:Calico3.28.2安装全攻略