文章目录

  • 🐳 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.pswp.cn/bicheng/87517.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/87517.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/87517.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从进攻性安全角度简析 Windows PowerShell

PowerShell 是 Windows 系统中强大的脚本语言和命令行工具&#xff0c;因其灵活性和与 .NET 框架的深度集成&#xff0c;成为攻击者执行恶意操作的热门选择。从进攻性安全视角看&#xff0c;PowerShell 的语言模式、执行策略&#xff08;Execution Policy&#xff09;、AMSI 绕…

MySQL的深度分页如何优化!

MySQL深度分页&#xff08;例如 LIMIT 1000000, 20&#xff09;性能差的主要原因在于 OFFSET 需要扫描并跳过大量数据&#xff0c;即使这些数据最终并不返回。随着 OFFSET 增大&#xff0c;性能会急剧下降。 以下是优化深度分页的常用策略&#xff0c;根据场景选择最适合的方案…

K8s Pod 调度基础——1

目录 一、Replication Controller&ReplicaSet ‌一、Replication Controller (RC)‌ ‌原理‌ ‌特性‌ ‌意义‌ ‌示例与逐行解释‌ ‌二、ReplicaSet (RS)‌ ‌原理‌ ‌特性‌ ‌意义‌ ‌示例与逐行解释‌ ‌三、RC 与 RS 的对比‌ ‌四、总结‌ 二、Dea…

C# Task异步的常用方法

Task异步的常用方法 C# 中的 Task 类是 System.Threading.Tasks 命名空间的一部分&#xff0c;用于表示异步操作。 一、Task.Run(Action action): 此静态方法用于在后台运行一个新任务&#xff0c;并返回与该任务关联的 Task 实例。 本质是将任务放入线程池执行&#xff0c;自…

OpenResty实战之PB级物联网数据处理:时序数据库优化实战

某智慧能源平台通过本方案成功处理了日均1.2万亿数据点&#xff0c;存储成本降低70%&#xff0c;查询延迟从分钟级优化到亚秒级。本文将深入解析PB级物联网数据处理的核心挑战与时序数据库深度优化技巧。 一、物联网数据特性与存储挑战 1.1 物联网数据核心特征 #mermaid-svg-U…

聊聊架构(5)数字化时代的平台商业架构

在数字化浪潮的推动下&#xff0c;平台经济已成为全球经济增长的关键驱动力。作为架构师&#xff0c;不仅要精通架构设计的基础方法论&#xff0c;还需具备敏锐的商业洞察力。架构的价值在于服务业务和商业&#xff0c;而业务的发展又促使架构不断演进。本文将深入探讨平台的商…

【数据增强】精细化贴图数据增强

1.任务背景 假设我有100个苹果的照片&#xff0c;我需要把这些照片粘贴到传送带照片上&#xff0c;模拟“传送带苹果检测”场景。 这种贴图的方式更加合理一些&#xff0c;因为yolo之类的mosaic贴图&#xff0c;会把图像弄的非常支离破碎。 现在我需要随机选择几张苹果图像&am…

HTML响应式Web设计

什么是响应式Web设计&#xff1f; RWD指的是响应式Web设计&#xff08;Responsive Web Design)RWD能够以可变尺寸传递网页RWD对于平板和移动设备是必需的 创建一个响应式设计&#xff1a; <!DOCTYPE html> <html lang"en-US"> <head> <styl…

【读代码】百度开源大模型:ERNIE项目解析

一、项目基本介绍 1.1 项目概述 ERNIE(Enhanced Representation through kNowledge IntEgration)是百度基于PaddlePaddle深度学习框架开发的多模态预训练模型体系。最新发布的ERNIE 4.5系列包含10个不同变体,涵盖从300B参数的巨型MoE模型到0.3B的轻量级模型,形成完整的多…

2025年6月:技术探索与生活平衡的协奏曲

> 当代码与晨跑轨迹在初夏的阳光下交织,我找到了程序员生活的黄金分割点 --- ### 一、技术突破:AI驱动的智能工作流优化系统 这个月我成功部署了第三代自动化工作流系统,核心创新在于**动态决策树+实时反馈机制**。系统可自主优化处理路径,错误率下降62%! ```pyth…

如何查看服务器运行了哪些服务?

&#x1f7e2; 一、Linux服务器Linux下&#xff0c;常用以下几种方法&#xff1a;✅ 1. 查看所有正在监听端口的服务netstat -tulnp 含义&#xff1a;-t TCP-u UDP-l 监听状态-n 显示端口号-p 显示进程号和程序名示例输出&#xff1a;pgsql复制编辑Proto Recv-Q Send-Q Local A…

【Linux基础知识系列】第三十八篇 - 打印系统与 PDF 工具

在Linux系统中&#xff0c;打印和PDF处理是日常办公和文档管理中不可或缺的功能。CUPS&#xff08;Common Unix Printing System&#xff09;是Linux中常用的打印服务&#xff0c;它提供了打印任务的管理和打印设备的配置功能。同时&#xff0c;Linux也提供了多种PDF处理工具&a…

STM32CUBEMX 使用教程6 — TIM 定时器配置、定时中断

往期文章推荐&#xff1a; STM32CUBEMX 使用教程5 — DMA配置 & 串口结合DMA实现数据搬运 STM32CUBEMX 使用教程4 — 串口 (USART) 配置、重定向 printf 输出 STM32CUBEMX 使用教程3 — 外部中断&#xff08;EXTI&#xff09;的使用 STM32CUBEMX 使用教程2 — GPIO的使…

微信小程序实现table表格

微信小程序没有table标签&#xff0c;运用display:table和display:flex实现一个内容字数不固定表格…… wxml&#xff1a; <view class"ContentShow"> <view class"conht">烟台市新闻发布会登记审批表</view> <view class"tabl…

MySQL 基本面试题

目录 一、SQL的基本操作 1、SQL查询的执行顺序 2、count(*)、count(1) 、count(列名) 的区别 3、char 和 varchar 的区别 4、MySQL 中常用的基础函数 5、MySQL的执行流程 6、MyISAM和InnoDB的区别 二、事务 1、事务的基本概念 2、事务的四大特性&#xff08;ACID) 3…

WPF学习笔记(12)下拉框控件ComboBox与数据模板

下拉框控件ComboBox与数据模板 一、ComboBox1. ComboBox概述2. ItemsControl类3. Selector类4. ComboBox类 二、ComboBox数据模板总结 一、ComboBox 1. ComboBox概述 ComboBox类代表一个有下拉列表的选择控件&#xff0c;供用户选择。 官方文档&#xff1a;https://learn.mic…

Docker for Windows 设置国内镜像源教程

在使用 Docker 时&#xff0c;由于默认的 Docker Hub 镜像源位于国外&#xff0c;国内用户在拉取镜像时可能会遇到速度慢或连接不稳定的问题。为了加速镜像拉取&#xff0c;可以将 Docker 配置为使用国内镜像源。以下是适用于 Windows 系统的详细配置方法&#xff1a; 方法一&…

一键部署AI工具!用AIStarter快速安装ComfyUI与Stable Diffusion

AIStarter部署AI工具&#xff0c;让AI开发更简单&#xff01;无需研究复杂环境配置&#xff0c;AIStarter平台提供一键安装ComfyUI和Stable Diffusion&#xff0c;支持多版本选择&#xff0c;快速上手。以下是详细步骤&#xff1a; 一、访问AIStarter市场 下载AIStarter&#x…

Python基础(吃洋葱小游戏)

下面我将为你设计一个"吃洋葱小游戏"的Python实现方案&#xff0c;使用Pygame库开发。这个游戏模拟吃洋葱的过程&#xff0c;玩家需要收集不同种类的洋葱以获得高分&#xff0c;同时避免吃到辣椒。 &#x1f9c5; 吃洋葱小游戏 - Python实现方案 &#x1f3ae; 1. …

Objective-C 路由表原理详解

在 Objective-C 中实现路由表是组件化架构的核心&#xff0c;它通过 URL 映射机制实现模块间解耦通信。以下是完整实现原理&#xff1a; 一、核心架构设计 #mermaid-svg-5jMinPiZe8mivAbi {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fil…