2个节点的docker容器网络实现通信过程

 更新时间:2025年07月24日 09:03:11   作者:喝醉酒的小白  
文章介绍了五种实现跨节点Docker容器通信的方法,涵盖host网络、Swarm集群、网络插件和自建VPN,适用于不同场景如调试、生产环境及高可用需求,并推荐根据部署复杂度选择方案

在两个节点(物理机或虚拟机)上运行的 Docker 容器之间实现网络通信,主要有以下几种方式,具体选择取决于你的部署需求、复杂性接受度以及是否使用编排工具(如 Docker Swarm 或 Kubernetes)。

常用方案汇总

方案一:使用host网络 + 宿主机 IP 访问(简单)

  • 容器运行时使用 --network host(仅限 Linux)
  • 通过节点的 IP 地址进行通信,例如:
节点A容器 -> curl http://<节点B的IP>:端口/

适合:快速调试、小规模部署

缺点:不适用于跨平台(如 Mac/Windows),端口 暴露在宿主机上,可能存在安全隐患。

方案二:通过宿主机端口映射 + 公有或内网 IP 访问(通用)

  • 每个容器启动时用 -p 暴露端口,例如:
docker run -d -p 8080:80 --name web nginx
  • 让另一个节点通过 IP + 映射端口访问:
curl http://<对方主机IP>:8080
  • 适合:多节点手动管理通信
  • 缺点:需要管理端口映射;跨主机容器发现复杂

方案三:Docker Swarm 网络(官方跨主机 overlay 网络)

  • 初始化 Swarm 集群:
docker swarm init --advertise-addr <节点1IP>
  • 加入其他节点(会生成 docker swarm join 命令)
  • 创建 overlay 网络:
docker network create -d overlay mynet
  • 使用该网络运行容器:
docker service create --name web --network mynet nginx
  • 适合:生产环境,服务自动发现
  • 需要学习 Swarm;容器必须用 docker service 管理(不是 docker run

方案四:使用独立网络插件(如 Weave, Calico, flannel)

这些工具为 Docker 提供跨主机容器网络

类似于 Kubernetes CNI 网络插件

  • 适合:高可用需求、复杂网络拓扑
  • 配置复杂,需额外工具学习

方案五:自建Tinc实现跨主机容器通信

把所有节点接入同一虚拟网络

容器绑定 --network bridge,通过虚拟 IP 通信

  • 适合:定制化网络
  • 运维成本高

推荐做法(具体场景推荐)

场景推荐方案
简单调试或临时通信方案一、方案二
生产集群容器管理方案三(Docker Swarm)
高可用+容器发现+安全网络方案三或方案四
已部署私有 VPN 网络方案五

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 本地Docker安装Postgres 12 + pgadmin的方法 (支持Apple M1)

    本地Docker安装Postgres 12 + pgadmin的方法 (支持Apple M1)

    这篇文章主要介绍了本地Docker安装Postgres 12 + pgadmin的方法 (支持Apple M1),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • 使用 docker部署tomcat并接入skywalking的使用

    使用 docker部署tomcat并接入skywalking的使用

    这里主要介绍了使用 docker 部署 tomact 并接入 skywalking 的使用,因为在网上并没有查到太多相关的信息,所以这里记录下来,需要对有需求的小伙伴提供一些帮助
    2021-04-04
  • 如何调整Docker中nginx的日志级别详解

    如何调整Docker中nginx的日志级别详解

    这篇文章主要给大家介绍了关于如何调整Docker中nginx的日志级别的相关资料,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2021-09-09
  • 基于Docker搭建Redis一主两从三哨兵的实现

    基于Docker搭建Redis一主两从三哨兵的实现

    这篇文章主要介绍了基于Docker搭建Redis一主两从三哨兵的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Docker四种网络类型原理实例解析

    Docker四种网络类型原理实例解析

    这篇文章主要介绍了Docker四种网络类型原理实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • 如何解决docker容器启动失败

    如何解决docker容器启动失败

    在本片文章中小编给各位整理的是关于如何解决docker容器启动失败相关内容,有兴趣的朋友们可以参考下。
    2020-03-03
  • Docker镜像压缩与优化操作

    Docker镜像压缩与优化操作

    这篇文章主要介绍了Docker镜像压缩与优化操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • Docker之开启远程访问的实现

    Docker之开启远程访问的实现

    这篇文章主要介绍了Docker之开启远程访问的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • docker资源控制管理Cgroup的实现

    docker资源控制管理Cgroup的实现

    本文主要介绍了docker资源控制管理Cgroup的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • 在 Docker 中安装和运行 PostgreSQL的详细步骤

    在 Docker 中安装和运行 PostgreSQL的详细步骤

    本文简述在Docker中安装和运行PostgreSQL的流程安装Docker、拉取镜像、运行容器并配置端口与密码、验证容器状态、连接数据库及创建用户,完成数据库部署,感兴趣的朋友一起看看吧
    2025-06-06

最新评论