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

Docker如何实现容器之间的通信

在 Docker 中,实现容器之间的通信有多种方式,核心在于网络配置。下面我从 基础原理常见方式最佳实践、以及 docker-compose 方式 全面讲解。


一、Docker 容器间通信的本质是什么?

容器之间通信依赖 Docker 网络(Network),默认有几种网络类型:

类型描述
bridge默认网络,同一网桥内容器可以通过容器名通信
host共享宿主机网络,无隔离(无端口映射)
none容器无网络,仅用于极端隔离场景
overlay用于 Docker Swarm 集群通信

二、常用容器通信方式

🧱 1. **桥接网络(默认)**下的通信

✔ 方法一:通过容器名称访问

默认容器在 bridge 网络中可以通过 名称解析容器名 → IP 进行通信:

docker network create mynet
docker run -dit --name container-a --network mynet alpine sh
docker run -dit --name container-b --network mynet alpine sh

然后进入 container-b,ping container-a 即可:

ping container-a

👉 可用于微服务中服务间调用,如:

http://container-a:8080/api/...

方法二:共享同一网络(如 docker-compose 自动创建)

version: '3'
services:web:image: nginxapp:image: my-java-appdepends_on:- web
  • web 的容器名称就是 web
  • app 中可通过 web:80 与其通信,无需指定 IP

2. host 网络模式下通信

容器共享宿主机网络,无端口映射限制,适合需要 UDP、低延迟通信:

docker run --network host my-app

注意:

  • 所有容器共享端口空间,避免端口冲突
  • 容器可以通过 localhost 访问宿主其他服务

3. 端口暴露 + 宿主机 IP 通信(最通用但低效)

每个容器通过 -p 映射端口暴露到宿主机:

docker run -p 8080:8080 --name web my-web
docker run -p 8081:8081 --name app my-app

此时容器间不能直接通信,只能通过宿主 IP 和端口:

curl http://host-ip:8080/

三、Docker 网络命令速查

命令说明
docker network ls查看所有网络
docker network inspect mynet查看某网络下容器信息(IP等)
docker network create mynet创建自定义网络
docker network connect把容器加入到一个网络
docker network disconnect移除容器的网络连接

四、docker-compose 中容器通信最佳实践

version: '3'
services:mysql:image: mysqlenvironment:MYSQL_ROOT_PASSWORD: 123456app:image: my-java-appdepends_on:- mysqlenvironment:DB_HOST: mysql
  • app 可以用 mysql:3306 与数据库通信
  • 不用写 IP,容器名即服务名,Compose 默认建立 bridge 网络

五、最佳实践小结

场景推荐方案
同机通信自定义 bridge 网络,容器名互通
简化开发docker-compose 管理服务
性能要求高使用 --network host
集群通信使用 overlay 网络(Docker Swarm)

补充:容器 DNS 是怎么解析的?

Docker 默认为每个网络分配一个 DNS 服务,容器名在网络中解析为容器 IP:

# 容器内
nslookup web

你会看到:web 自动解析成 IP 地址。


总结

通信方式说明与特点
通过容器名通信推荐,自定义网络或 docker-compose 默认支持
宿主机 IP + 映射端口最通用但性能差
host 网络通信高性能但需管理端口冲突
overlay 网络通信多主机通信(Swarm/集群用)

相关文章:

  • 李沐动手深度学习(pycharm中运行笔记)——12.权重衰退
  • GitLab CVE-2025-4278 安全漏洞解决方案
  • openLayers切换基于高德、天地图切换矢量、影像、地形图层
  • 使用NPOI库导出多个Excel并压缩zip包
  • 【跨界新视野】信号处理遇上VR/AR:下一代沉浸体验的核心技术与您的发表蓝海
  • STUN (Session Traversal Utilities for NAT) 服务器是一种网络协议
  • Linux 上 Ollama 部署为系统服务
  • 飞算JavaAI编程助手在IDEA中的安装教程:本地安装、离线安装、在线安装方法大全
  • 【Redis】Redis核心探秘:数据类型的编码实现与高速访问之道
  • 114. 二叉树展开为链表 --- 头插法(js)
  • SQL关键字三分钟入门: 表结构管理与分区设计。(ALTER、MODIFY、CHANGE、DEFAULT、VALUES、LESS THAN、RANGE)
  • 湖北理元理律师事务所:法律框架下的债务优化与生活重建双轨支持
  • 量子级网络通信系统:超维架构下的开发与星际级交互实现,突破传统边界的异构网络通信矩阵系统设计
  • Telerik生态整合:Kendo UI for Angular组件在WinForms应用中的深度嵌入(二)
  • 【算力网络】算网安全
  • 工程师生活:清除电热水壶(锅)水垢方法
  • 记一次jdk版本引起的生产问题
  • 详解鸿蒙Next仓颉开发语言中的全屏模式
  • 【技巧】使用frpc安全地内网穿透ssh访问内网机器
  • AWS数据库迁移实战:本地MySQL零停机上云方案
  • 怎样学习做网站的编程/商城全网推广运营公司
  • 做资料分享网站/美国搜索引擎排名
  • 做网站建设公司网易互客/搜索引擎的营销方法有哪些
  • 晋江网站建设哪家好/今日全国最新疫情通报
  • 比较大网站建设公司/廊坊首页霸屏优化
  • 网站开发 语言net/推广任务接单平台