docker 同宿主机不同网络容器通信+跨宿主机容器之间网络互连详解

news2024/10/22 3:37:20

一  同宿主机不同网络容器通信

方法一:使用 Docker 网络连接

  1. 创建一个自定义桥接网络

    • 创建一个新的自定义桥接网络,然后将需要通信的容器连接到这个网络。
    docker network create my_custom_network
  2. 将容器连接到自定义网络

    • 将需要通信的容器连接到同一个自定义网络。
    # 假设有两个容器 container1 和 container2 分别连接到不同的网络
    docker network connect my_custom_network container1
    docker network connect my_custom_network container2
  3. 验证通信

    • 进入其中一个容器,尝试 ping 另一个容器的名称或 IP 地址。
    docker exec -it container1 ping container2

方法二:使用端口映射

  1. 将容器的端口映射到宿主机

    • 通过 -p 选项将容器的端口映射到宿主机的端口。
    docker run -d --name container1 -p 8080:80 my_image1
    docker run -d --name container2 -p 8081:80 my_image2
  2. 通过宿主机 IP 地址通信

    • 容器可以通过宿主机的 IP 地址和映射的端口进行通信。
    # 获取宿主机的 IP 地址
    HOST_IP=$(hostname -I | awk '{print $1}')
    
    # 从 container1 访问 container2
    docker exec -it container1 curl http://$HOST_IP:8081

方法三:使用 Docker Compose

  1. 创建一个 Docker Compose 文件

    • 使用 Docker Compose 文件定义多个服务,并将它们连接到同一个网络。
    version: '3'
    services:
      container1:
        image: my_image1
        networks:
          - my_custom_network
      container2:
        image: my_image2
        networks:
          - my_custom_network
    networks:
      my_custom_network:
        driver: bridge
  2. 启动 Docker Compose

    • 使用 docker-compose up 命令启动服务。
    docker-compose up -d
  3. 验证通信

    • 进入其中一个容器,尝试 ping 另一个容器的名称或 IP 地址。
    docker exec -it container1 ping container2

方法四:使用 Docker 网络插件

  1. 安装网络插件

    • 使用第三方网络插件,如 Weave Net 或 Flannel,这些插件可以提供更高级的网络功能,包括跨网络的容器通信。
    # 安装 Weave Net
    docker plugin install weaveworks/net-plugin:latest_release
  2. 配置网络插件

    • 按照插件的文档进行配置,将需要通信的容器连接到同一个网络。
    # 使用 Weave Net 创建网络
    docker network create -d weave my_weave_network
    
    # 将容器连接到 Weave 网络
    docker network connect my_weave_network container1
    docker network connect my_weave_network container2
  3. 验证通信

    • 进入其中一个容器,尝试 ping 另一个容器的名称或 IP 地址。
    docker exec -it container1 ping container2

 二 跨宿主机容器之间网络互连

1. 覆盖网络(Overlay Network)

覆盖网络是 Docker 内置的一种网络模式,允许多个 Docker 守护进程之间的容器相互通信。这是实现跨宿主机容器网络互连的最常用和推荐的方法。

步骤
  1. 初始化 Docker Swarm(可选,但推荐):

    • 如果你使用 Docker Swarm 模式,首先需要初始化 Swarm。
    # 在其中一个宿主机上初始化 Swarm
    docker swarm init --advertise-addr <宿主机IP>
    • 获取加入 Swarm 的命令,并在其他宿主机上执行。
    # 获取加入命令
    docker swarm join-token worker
    
    # 在其他宿主机上执行加入命令
    docker swarm join --token <TOKEN> <宿主机IP>:2377
  2. 创建覆盖网络

    • 创建一个覆盖网络,指定网络驱动为 overlay
    docker network create --driver overlay my_overlay_network
  3. 启动容器并连接到覆盖网络

    • 在每个宿主机上启动容器,并将它们连接到同一个覆盖网络。
    # 在宿主机1上启动容器
    docker run -d --name container1 --network my_overlay_network my_image
    
    # 在宿主机2上启动容器
    docker run -d --name container2 --network my_overlay_network my_image
  4. 验证通信

    • 进入其中一个容器,尝试 ping 另一个容器的名称或 IP 地址。
    docker exec -it container1 ping container2

2. 使用第三方网络插件(Weave Net)

Weave Net 是一个流行的第三方网络插件,提供了易于使用的跨主机网络解决方案。

步骤
  1. 安装 Weave Net

    • 在每个宿主机上安装 Weave Net。
    curl -L git.io/weave -o /usr/local/bin/weave
    chmod +x /usr/local/bin/weave
  2. 启动 Weave Net

    • 在每个宿主机上启动 Weave Net。
    # 在第一个宿主机上启动 Weave Net
    weave launch
    
    # 获取第一个宿主机的 IP 地址
    HOST1_IP=$(hostname -I | awk '{print $1}')
    
    # 在其他宿主机上启动 Weave Net 并连接到第一个宿主机
    weave launch $HOST1_IP
  3. 创建 Weave 网络

    • 创建一个 Weave 网络。
    docker network create -d weave my_weave_network
  4. 启动容器并连接到 Weave 网络

    • 在每个宿主机上启动容器,并将它们连接到同一个 Weave 网络。
    # 在宿主机1上启动容器
    docker run -d --name container1 --network my_weave_network my_image
    
    # 在宿主机2上启动容器
    docker run -d --name container2 --network my_weave_network my_image
  5. 验证通信

    • 进入其中一个容器,尝试 ping 另一个容器的名称或 IP 地址。
    docker exec -it container1 ping container2

3. 使用桥接网络(变通方法)

虽然 Docker 的默认桥接网络(bridge)不支持跨宿主机通信,但可以通过一些变通的方法实现这一点。一种常见的方法是使用路由和 IP 转发。

步骤
  1. 配置 IP 转发

    • 在每个宿主机上启用 IP 转发。
    echo 1 > /proc/sys/net/ipv4/ip_forward
  2. 配置路由

    • 在每个宿主机上配置路由,使容器的流量通过宿主机转发。
    # 假设宿主机1的 IP 地址是 192.168.1.100
    # 宿主机2的 IP 地址是 192.168.1.101
    
    # 在宿主机1上配置路由
    ip route add 172.18.0.0/16 via 192.168.1.101
    
    # 在宿主机2上配置路由
    ip route add 172.17.0.0/16 via 192.168.1.100
  3. 创建自定义桥接网络

    • 在每个宿主机上创建自定义桥接网络。
    docker network create --driver bridge --subnet 172.17.0.0/16 my_custom_bridge
  4. 启动容器并连接到自定义桥接网络

    • 在每个宿主机上启动容器,并将它们连接到同一个自定义桥接网络。
    # 在宿主机1上启动容器
    docker run -d --name container1 --network my_custom_bridge my_image
    
    # 在宿主机2上启动容器
    docker run -d --name container2 --network my_custom_bridge my_image
  5. 验证通信

    • 进入其中一个容器,尝试 ping 另一个容器的 IP 地址。
    docker exec -it container1 ping 172.17.0.2

总结

跨宿主机的容器网络互连可以通过多种方法实现,每种方法都有其特点和适用场景:

  1. 覆盖网络(Overlay Network)

    • 优点:内置支持,易于使用,支持多主机通信和服务发现。
    • 缺点:需要 Docker Swarm 模式。
  2. 第三方网络插件(如 Weave Net)

    • 优点:提供更高级的网络功能,适用于复杂网络需求。
    • 缺点:需要额外安装和配置。
  3. 使用桥接网络(变通方法)

    • 优点:不需要额外的网络插件,适用于简单的跨宿主机通信。
    • 缺点:配置复杂,需要手动设置路由和 IP 转

 还有种docker compose 需要借助 docker swarm 就不介绍了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2220501.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二叉树遍历(前序、中序、后续)

目录 什么是二叉树二叉树遍历以递归创建树的角度看前、中、后序遍历前序遍历中序遍历后序遍历 栈来实现前、中、后序遍历栈的实现栈操作进行前序、中序遍历代码实现中序遍历和先序遍历栈操作进行后序遍历 什么是二叉树 树&#xff1a;树的根节点没有前驱&#xff0c;除根节点以…

Spring声明式事务管理:深入探索XML配置方式

前言 Spring的事务管理&#xff0c;无论是基于xml还是注解实现&#xff0c;本质上还是实现数据库的事务管理机制&#xff0c;因此要注意发送SQL的连接是否为同一个&#xff0c;这是实现声明式事务的关键。 以下案例和实现基于SSM整合框架完成&#xff0c;不知道如何整合SSM&…

CTFHUB技能树之文件上传——无验证

开启靶场&#xff0c;打开链接&#xff1a; 直接上传一句话木马&#xff1a; <?php eval($_POST[pass]);?> 成功提交并显示了上传的文件的路径 访问一下该文件触发一句话木马&#xff1a; 看到一片空白是正常的&#xff0c;因为没有写什么函数&#xff0c;比如&#x…

FineReport 计算同比增长

1、数据库查询 SELECTt1.年,t1.月,t1.总金额 AS 同期金额,t1.仓库名称,t2.总金额 AS 上期金额 FROMtest t1LEFT JOIN test t2 ON ( t1.年 t2.年 1 ) AND t1.月 t2.月 AND t1.仓库名称 t2.仓库名称2、配置字段 月份字段加后缀 月 数据列加后缀 计算同比增长率 if(LEN(B3)0 …

移动零---双指针法

目录 一&#xff1a;题目 二:算法原理讲解 三&#xff1a;代码编写 一&#xff1a;题目 题目链接&#xff1a;https://leetcode.cn/problems/move-zeroes/description/ 二:算法原理讲解 三&#xff1a;代码编写 void moveZeroes2(vector<int>& nums) {for (int d…

数据轻松上云——Mbox边缘计算网关

随着工业4.0时代的到来&#xff0c;工厂数字化转型已成为提升生产效率、优化资源配置、增强企业竞争力的关键。我们凭借其先进的边缘计算网关与云平台技术&#xff0c;为工厂提供了高效、稳定的数据采集与上云解决方案。本文将为您介绍Mbox边缘计算网关如何配合明达云平台&…

基于Java语言的培训平台+学习平台+在线学习培训系统+教育平台+教育学习系统+课程学习平台

简述 企业培训平台企业考试系统培训平台考试系统企业大学企业视频网站视频学习平台 介绍 企业培训平台支持企业培训考试全流程&#xff0c;在线学习、在线考试&#xff0c;成熟的企业培训考试解决方案&#xff0c;充分满足企业培训需求。 独立部署&#xff0c;仅内部员工登录…

JAVA高级--常用类(九)

JAVA高级–常用类 观看b站尚硅谷视频做的笔记 1、字符串相关的类 1.1 String 的使用 String 的特性&#xff1a; String 类&#xff1a;代表字符串。Java 程序中的所有字符串字面值&#xff08;如 “abc”&#xff09;都作为此类的实例实现。 String 是一个 final 类&#…

ESP8266 模块介绍—AT指令学习 笔记

零、简介 感谢百文网韦东山 老师对ESP8266模块的讲解 笔记在CSDN也有文章备份 大家可以在我的gitee仓库 中下载笔记源文件、ESP8266资料等 笔记源文件可以在Notion中导入 一、ESP8266-01S模块详细介绍 1. 名字的由来 ESP8266 是方形的主控芯片旁边的长方形是一个Flash-0…

IO编程——消息队列

题目&#xff1a; 代码实现&#xff1a; #include <myhead.h> //正文大小 #define MSGSZ (sizeof(struct msgbuf)-sizeof(long)) //定义要发送的消息类型 struct msgbuf{long msgtype; //消息类型char mtext[1024]; //消息正文 };int main(int argc, const char *ar…

全面升级:亚马逊测评环境方案的最新趋势与实践

在亚马逊测评领域深耕多年&#xff0c;见证了无数环境方案的更迭与演变&#xff0c;每一次变化都体现了国人不畏艰难、勇于创新的精神。面对平台的政策调整&#xff0c;总能找到相应的对策。那么&#xff0c;当前是否存在一套相对稳定且高效的技术方案呢&#xff1f;答案是肯定…

【计网】从零开始理解TCP协议 --- 拥塞控制机制,延迟应答机制,捎带应答,面向字节流

时间就是性命。 无端的空耗别人的时间&#xff0c; 其实是无异于谋财害命的。 --- 鲁迅 --- 从零开始理解TCP协议 1 拥塞控制2 延迟应答3 捎带应答4 面向字节流5 TCP异常情况TCP小结 1 拥塞控制 尽管TCP拥有滑动窗口这一高效的数据传输机制&#xff0c;能够确保在对方接收…

基于卷积神经网络的蔬菜识别系统,resnet50,mobilenet模型【pytorch框架+python源码】

更多目标检测和图像分类识别项目可看我主页其他文章 功能演示&#xff1a; 基于卷积神经网络的蔬菜识别系统&#xff0c;resnet50&#xff0c;mobilenet【pytorch框架&#xff0c;python&#xff0c;tkinter】_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于卷积神…

关于vue3中如何实现多个v-model的自定义组件

实现自定义组件<User v-model"userInfo" v-model:gender"gender"></User> User组件中更改数据可以同步更改父组件中的数据&#xff1a; 1 父组件&#xff1a; <User v-model"userInfo" v-model:gender"gender">&…

ROUGE:摘要自动评估软件包

算法解析 ROUGE&#xff08;Recall-Oriented Understudy for Gisting Evaluation&#xff09;是一组用于自动评估文本摘要质量的指标&#xff0c;主要通过比较机器生成的摘要与一个或多个参考摘要之间的重合程度来衡量。ROUGE 包括多个变体&#xff0c;其中最常用的有 ROUGE-N…

基于Java微信小程序的的儿童阅读系统的详细设计和实现(源码+lw+部署文档+讲解等)

详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不…

WebGoat SQL Injection (intro) 源码分析

首先了解 java 中 mysql 的连接&#xff1a;java连接Mysql WebGoat SQL Injection (intro) 10 根据提示&#xff1a;下面两个输入框只有一个受到 sql 注入攻击。题目要求是检索到所有数据 发现请求路径为 SqlInjection/assignment5b 定位到所在文件如下&#xff0c;根据代码…

基于递推式最小二乘法的PMSM参数辨识MATLAB仿真模型

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 模型简介 最小二乘法是一种回归估计法&#xff0c;适用于被辨识的参数与系统输出为线性关 系的情况。它是在一定数据量下&#xff0c;基于系统输出误差的平方和最小的准则对参 数进行辨识的方法。此模型通过…

使用Flask实现本机的模型部署

前言 模型部署是指将大模型运行在专属的计算资源上&#xff0c;使模型在独立的运行环境中高效、可靠地运行&#xff0c;并为业务应用提供推理服务。其目标是将机器学习模型应用于实际业务中&#xff0c;使最终用户或系统能够利用模型的输出&#xff0c;从而发挥其作用。 一、设…

unity 屏幕波动反馈打击效果(附资源下载)

unity 屏幕波动反馈打击效果 一枪打出去整个屏幕都回波动的效果反馈。 知识点&#xff1a; 1、动画事件 2、屏幕后处理 效果如图&#xff1a;&#xff08;波动速度浮动都可调整&#xff09; 附件下载