Docker实现容器之间通信的多种方式

 更新时间:2025年06月20日 08:36:40   作者:思静鱼  
在 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: nginx
  app:
    image: my-java-app
    depends_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: mysql
    environment:
      MYSQL_ROOT_PASSWORD: 123456
  app:
    image: my-java-app
    depends_on:
      - mysql
    environment:
      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/集群用)

以上就是Docker实现容器之间通信的多种方式的详细内容,更多关于Docker容器间通信的资料请关注脚本之家其它相关文章!

相关文章

  • docker 搭建hadoop以及hbase集群详解

    docker 搭建hadoop以及hbase集群详解

    本篇文章主要介绍了docker 搭建hadoop以及hbase集群详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • Docker Windows最新版(4.17.x)修改镜像存储路径的详细步骤

    Docker Windows最新版(4.17.x)修改镜像存储路径的详细步骤

    这篇文章主要介绍了Docker WIndows最新版(4.17.x)修改镜像存储路径的步骤,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • Docker Compose安装本地maven方式

    Docker Compose安装本地maven方式

    本文介绍了如何使用Docker Compose安装Maven,并提供了脚本和配置路径,通过运行Docker Compose,可以查看安装结果,进入容器后,可以查看Maven版本
    2024-12-12
  • Spring Boot 分层打包 Docker 镜像实践及分析(推荐)

    Spring Boot 分层打包 Docker 镜像实践及分析(推荐)

    这篇文章主要介绍了Spring Boot 分层打包 Docker 镜像实践及分析,本文通过图文并茂的形式实例代码相结合给大家介绍的非常详细,需要的朋友可以参考下
    2021-12-12
  • docker如何安装mysql

    docker如何安装mysql

    这篇文章主要介绍了docker如何安装mysql,总结了安装心得,帮助大家更好的使用docker镜像,感兴趣的朋友可以了解下
    2020-10-10
  • Docker容器compose容器集群的快速编排方式

    Docker容器compose容器集群的快速编排方式

    这篇文章主要介绍了Docker容器compose容器集群的快速编排方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • Docker 部署 Minio 对象存储服务器的过程详解

    Docker 部署 Minio 对象存储服务器的过程详解

    Minio是一个轻量级的应用程序,可以在各种环境中运行,包括公共云、私有云和混合云,这篇文章主要介绍了Docker 部署 Minio 对象存储服务器的过程详解,需要的朋友可以参考下
    2024-07-07
  • 在Docker Compose中获取最新镜像的多种方法总结

    在Docker Compose中获取最新镜像的多种方法总结

    Docker 镜像是 Docker 容器的基础,镜像包含了应用程序所需的所有文件和依赖,Docker-Compose 默认不会自动拉取最新的镜像版本,这可能会导致使用过时的镜像,从而错过重要的更新,为了确保 Docker-Compose 始终使用最新的镜像,我们可以采用多种方法,以下将详细介绍这些方法
    2024-08-08
  • Docker容器和本机之间的文件传输方法

    Docker容器和本机之间的文件传输方法

    这篇文章主要介绍了Docker容器和本机之间的文件传输方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • docker compose安装es+kibana 8.12.2的详细过程

    docker compose安装es+kibana 8.12.2的详细过程

    因云平台需要改造,es7升级为es8,所以记录一下,es8需要开启ssl认证,需要配置证书,全本带你用docker安装,便于后面es8的学习,这篇文章主要介绍了docker compose安装es+kibana 8.12.2的详细过程,感兴趣的朋友跟随小编一起看看吧
    2024-05-05

最新评论