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

第四部分-Docker网络与存储——19. 容器间通信

19. 容器间通信1. 容器间通信概述容器间通信是 Docker 编排的核心理解容器如何相互通信对于构建微服务架构至关重要。Docker 提供了多种容器间通信方式每种方式适用于不同场景。┌─────────────────────────────────────────────────────────────┐ │ 容器间通信方式 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 方式1自定义网络推荐 │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 容器A ──▶ 容器名解析 ──▶ 容器B │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ 方式2端口映射 │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 容器 ──▶ 宿主机端口 ──▶ 外部请求 │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ 方式3容器网络共享 │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 容器B (共享A的网络) ──▶ localhost ──▶ 容器A │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ 方式4跨主机通信 │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 主机A容器 ──▶ Overlay ──▶ 主机B容器 │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘2. 自定义网络通信2.1 同一网络通信# 创建自定义网络dockernetwork create app-net# 在同一网络中运行容器dockerrun-d--nameweb--networkapp-net nginxdockerrun-d--nameapi--networkapp-net myapidockerrun-d--namedb--networkapp-net mysql# 通过容器名通信自动 DNS 解析dockerexecwebpingapidockerexecwebpingdb# 测试 HTTP 通信dockerexecapicurlhttp://web:80dockerexecapicurlhttp://db:3306# 查看 DNS 解析dockerexecwebcat/etc/resolv.confdockerexecwebnslookupapi2.2 网络别名通信# 创建网络dockernetwork create app-net# 为容器设置多个别名dockerrun-d--namedb\--networkapp-net\--network-alias mysql\--network-alias database\mysql# 其他容器通过别名访问dockerrun--rm--networkapp-net alpinepingmysqldockerrun--rm--networkapp-net alpinepingdatabase# 查看网络别名dockernetwork inspect app-net3. 端口映射通信3.1 基础端口映射# 映射到宿主机端口dockerrun-d--nameweb-p8080:80 nginx# 其他容器通过宿主机访问dockerrun--rmalpinecurlhttp://host.docker.internal:8080# 映射到特定 IPdockerrun-d-p127.0.0.1:8080:80 nginx# 随机端口dockerrun-d-Pnginx# 查看看口映射dockerport web3.2 多端口映射# 映射多个端口dockerrun-d\--nameapp\-p8080:8080\-p8443:8443\-p9000-9005:9000-9005\myapp# UDP 端口dockerrun-d-p53:53/udp dns-server# 查看所有端口映射dockerinspect app|grep-A20PortBindings4. 容器网络共享4.1 Container 模式# 主容器提供网络dockerrun-d--nameweb nginx# 辅助容器共享网络dockerrun-d--namesidecar--networkcontainer:web fluentd# sidecar 容器可以使用 localhost 访问 web# sidecar 容器没有独立网络栈IP 与 web 相同# 查看网络dockerexecsidecaripaddr# 与 web 相同# 适用场景# - 日志收集# - 监控代理# - 网络调试4.2 网络工具侧车# 主应用容器dockerrun-d--nameapp myapp# 网络调试容器共享网络dockerrun-it--namenet-debug--networkcontainer:app alpinesh# 在调试容器中抓包apkaddtcpdump tcpdump-ieth0-c10# 查看网络连接netstat-tulnss-tuln5. Docker Compose 通信5.1 Compose 默认网络# docker-compose.ymlversion:3.8services:web:image:nginxapi:image:myapidb:image:mysqlenvironment:MYSQL_ROOT_PASSWORD:123# 服务之间自动可以通过服务名通信# web → api# api → db5.2 自定义 Compose 网络version:3.8services:web:image:nginxnetworks:-frontendapi:image:myapinetworks:-frontend-backenddb:image:mysqlnetworks:-backendnetworks:frontend:backend:6. 跨主机通信6.1 Overlay 网络# 初始化 Swarm 集群dockerswarm init --advertise-addr192.168.1.10# 创建 Overlay 网络dockernetwork create-doverlay--attachablemy-overlay# 在其他节点加入集群dockerswarmjoin--tokenSWMTKN-1-xxx192.168.1.10:2377# 使用 Overlay 网络运行服务dockerservicecreate--nameweb--networkmy-overlay nginx# 查看 Overlay 网络状态dockernetwork inspect my-overlay6.2 Macvlan 跨主机# 每台主机创建相同配置的 macvlan 网络dockernetwork create-dmacvlan\--subnet192.168.1.0/24\--gateway192.168.1.1\-oparenteth0\macnet# 容器获得同网段 IP可直接跨主机通信7. 通信测试工具7.1 网络测试容器# 创建网络测试镜像catDockerfile.testEOF FROM alpine RUN apk add --no-cache curl wget netcat-openbsd bind-tools iputils nmap CMD [sleep, infinity] EOFdockerbuild-fDockerfile.test-tnet-tool.# 运行测试容器dockerrun-d--nametester--networkapp-net net-tool# 测试连接dockerexectesterpingwebdockerexectesternslookupapidockerexectestercurlhttp://db:33067.2 常用测试命令# Ping 测试dockerexeccontainerApingcontainerB# HTTP 测试dockerexeccontainerAcurl-vhttp://containerB:8080/health# 端口连通性dockerexeccontainerAnc-zvcontainerB3306# DNS 解析dockerexeccontainerAnslookupcontainerBdockerexeccontainerAdigcontainerB# 路由追踪dockerexeccontainerAtraceroutecontainerB# HTTP 压力测试dockerexeccontainerA ab-n1000-c10http://containerB:8080/8. 安全通信8.1 TLS/SSL 加密# 为容器间通信配置 TLS# 生成证书openssl req-x509-newkeyrsa:4096-keyoutkey.pem-outcert.pem-days365-nodes# 挂载证书到容器dockerrun-d--nameapp\-v$(pwd)/cert.pem:/app/cert.pem\-v$(pwd)/key.pem:/app/key.pem\myapp# 配置 HTTPSdockerrun-d--namenginx\-v$(pwd)/cert.pem:/etc/nginx/cert.pem\-v$(pwd)/key.pem:/etc/nginx/key.pem\nginx8.2 网络隔离策略# 创建隔离网络dockernetwork create--internalinternal-net# 敏感服务放在内部网络dockerrun-d--namedb--networkinternal-net mysql# API 网关连接内外网络dockerrun-d--nameapi-gateway--networkinternal-net--networkexternal-net myapp# 外部只能访问 API 网关9. 故障排查9.1 常见通信问题# 1. 容器无法解析其他容器名# 检查网络类型默认 bridge 不支持dockerinspect container|grep-A10Networks# 2. 端口连接失败# 检查容器内服务是否运行dockerexeccontainernetstat-tuln# 3. 网络隔离导致无法通信# 检查网络配置dockernetwork inspect network-name# 4. iptables 规则干扰sudoiptables-L-n-v9.2 通信监控# 监控容器间流量dockerrun-it--rm--nethost nicolaka/netshoot# 使用 tcpdump 抓包# 查看连接状态dockerexeccontainer ss-tunp# 监控服务端口dockerexeccontainernetstat-an|grepLISTEN10. 性能优化10.1 减少网络开销# 使用 host 网络减少 NATdockerrun-d--networkhostmyapp# 使用 --link已过时不推荐# 使用自定义网络代替# 使用网络音量dockernetwork create--optcom.docker.network.bridge.enable_ip_masqueradefalse mynet10.2 连接池# 应用层配置连接池# 减少频繁建立连接的开销# 以 MySQL 为例11. 通信模式对比方式性能易用性跨主机适用场景自定义网络中高否单机微服务端口映射低低是外部访问Container模式高中否SidecarOverlay中高是Swarm 集群Macvlan高中是物理网络12. 最佳实践✅ 推荐做法使用自定义网络统一管理服务间使用容器名通信合理规划网络架构前端/后端/数据层敏感服务放在内部网络使用健康检查确保服务可用添加网络连接超时和重试❌ 避免事项使用已废弃的--link跨服务传递容器 IPIP 会变化忽略网络隔离导致安全漏洞生产环境使用默认 bridge13. 常见问题Q1: 容器间通信延迟高怎么办使用--network host模式检查网络驱动配置使用 Macvlan 绕过 NATQ2: 容器重启后 IP 变化怎么办使用容器名而不是 IP自定义网络提供 DNS 解析Q3: 如何限制容器间通信使用网络隔离配置 iptables 规则使用网络策略Kubernetes14. 小结自定义网络是最推荐的容器间通信方式容器名解析简化服务发现端口映射用于外部访问Container 模式适合 SidecarOverlay/Macvlan支持跨主机通信合理设计网络架构提高安全性选择适当的通信方式平衡性能和易用性

相关文章:

第四部分-Docker网络与存储——19. 容器间通信

19. 容器间通信 1. 容器间通信概述 容器间通信是 Docker 编排的核心,理解容器如何相互通信对于构建微服务架构至关重要。Docker 提供了多种容器间通信方式,每种方式适用于不同场景。 ┌────────────────────────────────…...

从Word到LaTeX的完美转换:3种方案对比与docx2tex终极指南

从Word到LaTeX的完美转换:3种方案对比与docx2tex终极指南 【免费下载链接】docx2tex Converts Microsoft Word docx to LaTeX 项目地址: https://gitcode.com/gh_mirrors/do/docx2tex 深夜三点,李博士盯着电脑屏幕,手指在键盘上机械地…...

BUUCTF:[极客大挑战 2019]RCE ME 深度解析:从正则绕开到LD_PRELOAD的完整利用链

1. 题目背景与初步分析 BUUCTF的[极客大挑战 2019]RCE ME是一道典型的PHP代码审计与绕过题目。题目给出了一个简单的PHP页面&#xff0c;核心代码如下&#xff1a; <?php error_reporting(0); if(isset($_GET[code])){$code$_GET[code];if(strlen($code)>40){die(&quo…...

如何快速提取Unity游戏素材:AssetStudio完整使用指南

如何快速提取Unity游戏素材&#xff1a;AssetStudio完整使用指南 【免费下载链接】AssetStudio AssetStudio - Based on the archived Perfares AssetStudio, I continue Perfares work to keep AssetStudio up-to-date, with support for new Unity versions and additional i…...

“社恐”技术大牛周志明的写作哲学:如何像他一样,用开源文档和博客打造个人技术品牌

“社恐”技术大牛的写作哲学&#xff1a;用开源与博客构建个人技术品牌 在技术圈里&#xff0c;有这样一群人&#xff1a;他们不善言辞&#xff0c;却能用代码和文字征服同行&#xff1b;他们回避社交&#xff0c;却在GitHub和博客上拥有大批追随者。这类"社恐"技术大…...

LinkSwift:如何让网盘下载从龟速到光速?这款工具给出了答案

LinkSwift&#xff1a;如何让网盘下载从龟速到光速&#xff1f;这款工具给出了答案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国…...

如何快速掌握思源宋体:7种免费商用字体让你的设计瞬间专业

如何快速掌握思源宋体&#xff1a;7种免费商用字体让你的设计瞬间专业 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为中文排版设计而烦恼吗&#xff1f;你是否曾经在寻找既美观…...

GetQzonehistory:5分钟免费备份你的QQ空间青春回忆

GetQzonehistory&#xff1a;5分钟免费备份你的QQ空间青春回忆 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 还在担心那些承载青春记忆的QQ空间说说会随着时间消失吗&#xff1f;GetQ…...

程序员转大模型,这8个必备框架,新手也能快速落地项目

文章目录前言1. LangChain 2026&#xff1a;AI应用开发的"事实标准"&#xff0c;新手入门绕不开1.1 大白话理解LangChain1.2 2026年核心更新亮点1.3 新手快速上手代码示例1.4 避坑指南2. LlamaIndex&#xff1a;RAG专属神器&#xff0c;知识库搭建就靠它2.1 大白话理…...

Anylogic建模效率翻倍秘诀:活用‘智能体类型’实现模块化设计与复用

Anylogic建模效率翻倍秘诀&#xff1a;活用‘智能体类型’实现模块化设计与复用 在复杂系统仿真领域&#xff0c;Anylogic凭借其多方法建模能力已成为工业级解决方案的首选工具。但当我们面对包含数百个交互实体的产线仿真时&#xff0c;传统逐个创建智能体的方式不仅效率低下&…...

ECharts地图可视化踩坑实录:从GeoJSON数据获取到本地开发跨域问题的全链路解决

ECharts地图可视化实战指南&#xff1a;从数据获取到跨域问题解决的全流程解析 地图可视化是现代数据展示的重要手段之一&#xff0c;而ECharts作为国内最流行的可视化库之一&#xff0c;其地图功能被广泛应用于各类项目中。但在实际开发过程中&#xff0c;从数据获取到最终呈现…...

Vivado里用OSERDESE2+OBUFDS实现LVDS输出,一个完整可复用的Verilog模块(含XDC约束)

Vivado中LVDS输出的工程化实现&#xff1a;OSERDESE2与OBUFDS的模块化封装 在高速数字电路设计中&#xff0c;LVDS&#xff08;低压差分信号&#xff09;因其抗干扰能力强、功耗低、传输速率高等优势&#xff0c;已成为FPGA与外部器件通信的重要接口标准。对于Xilinx FPGA开发者…...

编程应届生面试,HR最常问的20个问题,高分答案都在这里

文章目录前言一、自我认知类&#xff1a;HR想知道你是不是“对的人”问题1&#xff1a;请你做一个3分钟的自我介绍问题2&#xff1a;你最大的优点和缺点是什么&#xff1f;问题3&#xff1a;你为什么选择这个专业/行业&#xff1f;二、职业规划类&#xff1a;看你能不能在公司待…...

Transformer架构优化实战2026:注意力机制、KV Cache与推理加速完整指南

Transformer架构诞生已近十年&#xff0c;但它的工程优化故事才刚刚开始。2026年&#xff0c;理解并掌握Transformer的核心优化技术&#xff0c;是每个LLM工程师的必修课。一、为什么Transformer的优化如此重要一个7B参数的LLM在A100上推理时&#xff0c;如果没有优化&#xff…...

对比自行维护多个API密钥,Taotoken的密钥管理与审计日志更省心

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 对比自行维护多个API密钥&#xff0c;Taotoken的密钥管理与审计日志更省心 在构建基于大模型的应用时&#xff0c;项目管理者常常需…...

从选型到调试:MCP2517FD与ATA6563收发器搭配实战避坑指南

从选型到调试&#xff1a;MCP2517FD与ATA6563收发器搭配实战避坑指南 在工业控制和车载电子系统中&#xff0c;CAN FD总线技术正逐步取代传统CAN总线&#xff0c;成为高速数据传输的新标准。作为硬件工程师&#xff0c;我们常常面临这样的挑战&#xff1a;如何在有限的项目周期…...

别再只配防火墙了!华为USG+交换机联动配置实战:让内网用户顺利上网的完整闭环

华为USG防火墙与交换机联动配置&#xff1a;构建企业内网安全上网的完整方案 当企业内网用户反馈无法访问互联网时&#xff0c;很多网络工程师的第一反应是检查防火墙配置。然而&#xff0c;真实情况往往是防火墙只是整个网络出口链条中的一环。本文将从一个完整的网络架构视角…...

观察不同时段调用Taotoken多模型API的延迟波动情况

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 观察不同时段调用Taotoken多模型API的延迟波动情况 在构建依赖大模型能力的应用时&#xff0c;服务的响应延迟是一个直接影响用户体…...

5分钟掌握LayerDivider:AI图像分层工具终极指南

5分钟掌握LayerDivider&#xff1a;AI图像分层工具终极指南 【免费下载链接】layerdivider A tool to divide a single illustration into a layered structure. 项目地址: https://gitcode.com/gh_mirrors/la/layerdivider 你是否曾经面对复杂的插画作品&#xff0c;花…...

WeChatMsg完整指南:如何永久保存并深度分析你的微信聊天记录

WeChatMsg完整指南&#xff1a;如何永久保存并深度分析你的微信聊天记录 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we…...

【管理科学】【财务领域】第四十九篇 企业资本通过金融工具获取资本与通过制造舆论冲突吸引注意力01

企业资本运作与注意力经济融合模型分析 本模型旨在揭示企业如何将金融资本杠杆与注意力经济策略相结合,以实现资本扩张与用户习惯的深度绑定。 编号 类型 企业资本注意力经济和长期购买/消费习惯培养模型 逐步推理思考的方程式 时序数学方程式 交互周期和交互流程的数学…...

30_AI短片实战第三弹:头盔一致性、连续动作推导与情绪特写叠加(附提示词)

文章目录 一、锁定造型:为角色建立“三视图”头盔参考 问题诊断 解决方案:角色三视图思路 二、连续动作推导:从一张图“衍生”出下一帧 工作流创新 具体操作 效果 适用场景 三、怪兽摔落镜头:场景切换中的叙事连续性 镜头设定 关键调整点 生成结果 四、情绪特写:瞳孔与面罩…...

OpenClaw用户迁移至Taotoken平台的具体配置步骤详解

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 OpenClaw用户迁移至Taotoken平台的具体配置步骤详解 如果你正在使用OpenClaw这类Agent框架&#xff0c;并希望将后端模型服务切换至…...

告别虚拟机卡顿:在Windows 11的WSL2里为树莓派4B编译Automotive Grade Linux镜像

告别虚拟机卡顿&#xff1a;在Windows 11的WSL2里为树莓派4B编译Automotive Grade Linux镜像 嵌入式开发者在Windows平台上常面临一个尴尬处境&#xff1a;项目需要Linux环境&#xff0c;但物理机切换或虚拟机性能损耗让人头疼。去年我在为某车载HMI项目构建AGL镜像时&#xff…...

Unity UGUI点击事件避坑指南:为什么你的Image点了没反应?

Unity UGUI点击事件避坑指南&#xff1a;为什么你的Image点了没反应&#xff1f; 当你信心满满地在Unity中为Image组件添加了IPointerClickHandler接口&#xff0c;点击运行时却发现无论如何点击屏幕都没有反应——这种挫败感每个Unity开发者都经历过。本文将深入剖析UGUI事件系…...

3分钟快速上手:免费AI语音修复工具VoiceFixer终极指南 [特殊字符]

3分钟快速上手&#xff1a;免费AI语音修复工具VoiceFixer终极指南 &#x1f3a4; 【免费下载链接】voicefixer General Speech Restoration 项目地址: https://gitcode.com/gh_mirrors/vo/voicefixer 你是否曾经因为录音质量不佳而烦恼&#xff1f;会议录音充满杂音、珍…...

Windows与Office终极激活指南:KMS_VL_ALL_AIO智能脚本免费解决方案

Windows与Office终极激活指南&#xff1a;KMS_VL_ALL_AIO智能脚本免费解决方案 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为系统激活烦恼吗&#xff1f;KMS_VL_ALL_AIO智能激活脚本为您…...

Diablo Edit2深度解析:技术架构与安全使用的暗黑2存档编辑完全手册

Diablo Edit2深度解析&#xff1a;技术架构与安全使用的暗黑2存档编辑完全手册 【免费下载链接】diablo_edit Diablo II Character editor. 项目地址: https://gitcode.com/gh_mirrors/di/diablo_edit Diablo Edit2是一款功能强大的开源暗黑破坏神2存档编辑器&#xff0…...

为Claude Code配置Taotoken解决密钥被封与Token不足痛点

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 为Claude Code配置Taotoken解决密钥被封与Token不足痛点 对于经常使用Claude Code进行开发的工程师来说&#xff0c;直接使用官方服…...

为团队统一开发环境利用Taotoken CLI一键配置多模型密钥

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 为团队统一开发环境利用Taotoken CLI一键配置多模型密钥 在团队协作开发中&#xff0c;一个常见的挑战是如何统一管理AI模型调用的…...