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

Docker 入门教程(九):容器网络与通信机制

文章目录

  • 🐳 Docker 入门教程(九):容器网络与通信机制
    • 一、Docker 网络模型
    • 二、Docker 的四种网络类型
    • 三、容器间通信机制
    • 四、相关指令

🐳 Docker 入门教程(九):容器网络与通信机制


一、Docker 网络模型

Docker 网络建立在 Linux 的标准网络堆栈之上。

你可以把 Docker 的默认网络结构理解为这样:

[容器A] -- vethA --┐│[docker0] -- [eth0/eth1] -- 外网│
[容器B] -- vethB --┘
  • 每个容器都有自己的虚拟网卡(veth)
  • 它连到一个桥接设备(如 docker0)
  • Docker 使用 NAT 和 iptables 把容器网络流量转发出去

二、Docker 的四种网络类型

1. bridge(默认网络)

docker run -it ubuntu
  • 容器会被接入 docker0 网桥
  • 它会获得一个私有 IP,如 172.17.0.2
  • 容器与容器通信需要通过 IP 地址
  • 不支持容器名通信(除非用 extra hosts)

原理:

  • veth pair 虚拟网卡连接容器与宿主的 docker0 网桥
  • iptables + NAT 转发出网流量

2. host 网络(共享主机)

docker run --network host nginx
  • 容器直接用宿主的网络协议栈
  • 没有独立 IP,容器中的 localhost 就是宿主
  • 所有端口直接暴露在宿主上
  • 性能高(少一层 NAT)
  • 安全性低,容易冲突

3. none 网络(禁用)

docker run --network none alpine
  • 容器没有任何网络接口(除了 lo
  • 它无法 ping、curl、connect 到任何外部主机
  • 完全隔离

用于:

  • 极端安全场景(如跑本地算法模型)
  • 自己配置网络(如 macvlan)

4. 自定义 bridge 网络(推荐)

docker network create mynet
  • 容器获得独立私有 IP(如 172.18.x.x)
  • 自动启用 Docker 内建 DNS 服务器
  • 可以通过容器名通信
  • 网络隔离,跨网络无法互通(unless connect)

这是生产中建议的做法


三、容器间通信机制

默认网络:不能用容器名通信

docker run -dit --name a1 busybox
docker run -dit --name a2 busybox
docker exec -it a1 ping a2  # 无法解析

因为默认网络没有 DNS 解析;只能用 IP 访问,但 IP 每次变化

自定义网络下:支持 DNS 容器名通信

docker network create mynet
docker run -dit --name a1 --network mynet busybox
docker run -dit --name a2 --network mynet busybox
docker exec -it a1 ping a2 # 成功

Docker 会在该网络中启用 DNS 服务,自动解析容器名;每个容器注册自己的名字


四、相关指令

docker network ls

列出所有网络,包括系统默认和自定义的:

docker network ls

输出示例:

NETWORK ID     NAME        DRIVER    SCOPE
d72e7e0a6f8b   bridge      bridge    local
d8c7d1ed43e7   host        host      local
192e5ee1525d   none        null      local
ac28c2fbad1f   mynet       bridge    local

docker network inspect <网络名>

查看网络的详细信息,包括:

  • 连接了哪些容器
  • 分配了哪些 IP
  • DNS 名称等
docker network inspect mynet

docker network create [参数] <网络名>

创建一个自定义网络(推荐):

docker network create mynet

也可以加参数:

docker network create \--driver bridge \--subnet 192.168.100.0/24 \--gateway 192.168.100.1 \mynet

Docker 默认使用 bridge 驱动,你也可以用 overlay(Swarm)或 macvlan(高级网络映射)


docker network rm <网络名>

删除网络(网络中不能有容器,否则会失败):

docker network rm mynet

docker network connect

将某个容器连接到另一个网络:

docker network connect mynet mycontainer
  • 容器可以连接多个网络
  • 可用于跨网段打通通信

docker network disconnect

将容器从某网络断开:

docker network disconnect mynet mycontainer

如果容器只连接了一个网络,断开后它将失去网络功能。


调试

docker exec 进入容器内测试连接

docker exec -it myapp ping otherapp
docker exec -it myapp nslookup otherapp
docker exec -it myapp curl http://otherapp:5000

docker inspect <容器名> 查看网络配置

docker inspect myapp

重点字段:

"Networks": {"mynet": {"IPAddress": "172.18.0.2",...}
}
http://www.dtcms.com/a/263034.html

相关文章:

  • Qt 前端开发
  • (3)pytest的setup/teardown
  • 文心大模型 4.5 系列开源首发:技术深度解析与应用指南
  • Python 数据分析与可视化 Day 12 - 建模前准备与数据集拆分
  • 【C语言 | 字符串处理】sscanf 用法(星号*、集合%[]等)详细介绍、使用例子源码
  • 嵌入式SoC多线程架构迁移多进程架构开发技巧
  • C++ std::list详解:深入理解双向链表容器
  • uniapp小程序蓝牙打印通用版(集成二维码打印)
  • 深度学习04 卷积神经网络CNN
  • 【Python】 Function
  • 计算整数二进制中1的个数
  • 障碍感知 | 基于3D激光雷达的三维膨胀栅格地图构建(附ROS C++仿真)
  • day47 注意力热图可视化
  • 展示折线图的后端数据连接
  • leetcode427.建立四叉树
  • 利润才是机器视觉企业的的“稳定器”,机器视觉企业的利润 = (规模经济 + 技术差异化 × 场景价值) - 竞争强度
  • ViT与CLIP:图像×文本 多模态读心术揭秘
  • 大数据系统架构实践(三):Hbase集群部署
  • 嘉讯科技:医疗信息化、数字化、智能化三者之间的关系和区别
  • EPLAN 中定制 自己的- A3 图框的详细指南(一)
  • 【机器学习深度学习】适合微调的模型选型指南
  • DAOS集群部署-Docker模式
  • CloudBase AI Toolkit 让我用“嘴”开发出的第一款网页游戏
  • 网络安全运维与攻防演练综合实训室解决方案
  • 服务器被入侵的常见迹象有哪些?
  • CentOS服务器SSH远程连接全指南
  • HarmonyOS NEXT应用元服务常见列表操作多类型列表项场景
  • 2025年数字信号、计算机通信与软件工程国际会议(DSCCSE 2025)
  • Excel 如何让表看起来更清晰、专业,而不是花里胡哨?
  • 低功耗MM32L0180系列MCU