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

server/2024/10/24 3:23:26/

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

方法一:使用 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_image1networks:- my_custom_networkcontainer2:image: my_image2networks:- 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 网络

    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.ppmy.cn/server/134334.html

相关文章

【计网笔记】应用层

应用层服务传输层协议端口号DNSTCP或UDP53FTPTCP20或21TELNETTCP23HTTPTCP80HTTPSTCP443SMTPTCP25POP3TCP110IMAPTCP143MIME//DHCPUDP67SNMPUDP161 域名系统DNS 使用具有一定语义的域名来助记IP地址 一个域名可能有多个IP地址 服务器农场 前端调配请求去不同的服务器不同服务…

maven多模块聚合打包父pom version占位符总无法install问题解决

今天新写个java项目&#xff0c;父pom是 pom &#xff0c;打包是verison 用的占位符总是找不到正确版本 报错 Failed to read artifact descriptor for com.lw.lwte:lwte-all:jar:1.0.0-SNAPSHOT: The following artifacts c ould not be resolved: com.lw.lwte:lwte-parent:po…

编译器与集成开发环境

编译器 一.什么是编译器 将高级语言代码转换成CPU能够识别的二进制指令 二.常用编译器 1.MSVC Windows平台Visual Studio(VS)自带的C/C编译器 2.MingW(编译环境)&#xff1a;gcc是MingW的核心组成 Linux/Windows 3.clang 苹果电脑上的开发工具&#xff0c;XCode 集成…

Elasticsearch 解析:倒排索引机制/字段类型/语法/常见问题

Elasticsearch 是一个分布式的开源搜索引擎&#xff0c;广泛用于全文搜索、分析和数据存储。它基于 Apache Lucene 构建&#xff0c;支持 RESTful 风格的 API&#xff0c;使得开发者能够高效地存储和检索数据。本文将详细讲解 Elasticsearch 的基本原理&#xff0c;特别是其倒排…

CF-Loss:用于视网膜多分类血管分割和血管特征测量的临床相关特征优化损失函数|文献速递-基于生成模型的数据增强与疾病监测应用

Title 题目 CF-Loss: Clinically-relevant feature optimised loss function for retinal multi-class vessel segmentation and vascular feature measurement CF-Loss&#xff1a;用于视网膜多分类血管分割和血管特征测量的临床相关特征优化损失函数 01 文献速递介绍 视…

android系统资源调度分析

一 哪些资源可以调度 cpu&#xff0c;mem&#xff0c;io&#xff0c;gpu 在此之上linux又虚拟出了 cgroup子系统&#xff0c;这里列举常用的分类 blkio 管理io输入输出限制的 cpuset 控制cpu核的分配 freezer 控制进程挂起 memory 内存限制 stune 控制cpu频率…

2023年五一杯数学建模C题双碳目标下低碳建筑研究求解全过程论文及程序

2023年五一杯数学建模 C题 双碳目标下低碳建筑研究 原题再现&#xff1a; “双碳”即碳达峰与碳中和的简称&#xff0c;我国力争2030年前实现碳达峰&#xff0c;2060年前实现碳中和。“双碳”战略倡导绿色、环保、低碳的生活方式。我国加快降低碳排放步伐&#xff0c;大力推进…

【HTML】构建网页的基石

我的主页&#xff1a;2的n次方_ HTML 是一种超文本标记语言&#xff0c;不仅有文本&#xff0c;还能包含图片&#xff0c;音频等 1. HTML 的文件基本结构 html 标签是整个 html 文件的最顶层标签&#xff0c;head 标签中写页面的属性&#xff0c;body 标签是页面中显示的…