游乐游手机版
首页/系统平台/文章详情

在Docker的容器之间设置网络设置网络通信的方法

时间:2026-04-22 20:46
你也许已经知道了,Docker 容器技术是现有的成熟虚拟化技术的一个替代方案 如今,Docker容器技术早已不是新鲜概念,它正逐步成为传统虚拟化方案的一个高效替代品。越来越多的企业将其应用于快速环境部署、简化基础设施配置以及实现多客户环境隔离等场景。当你真的打算在生产环境中用Docker容器来部署应

你也许已经知道了,Docker 容器技术是现有的成熟虚拟化技术的一个替代方案

如今,Docker容器技术早已不是新鲜概念,它正逐步成为传统虚拟化方案的一个高效替代品。越来越多的企业将其应用于快速环境部署、简化基础设施配置以及实现多客户环境隔离等场景。当你真的打算在生产环境中用Docker容器来部署应用时,很可能会面临一个典型的复杂场景:需要启动多个容器,共同构成一套多层应用系统——比如,有的容器负责负载均衡,有的跑着LAMP栈,还有的专管数据库或用户界面。

于是,一个现实的问题就摆在了面前:当你有不止一台宿主机,并且无法预先确定容器会在哪台机器上创建时,如何保证这些分散在各处的容器能够顺畅地互相通信?

容器联网技术,有没有既可靠又省心的选择?答案是肯定的。在开源世界里,Wea ve算得上是个中翘楚。它能帮你省去大量手动配置的烦恼,用过之后你大概会感慨:早知道就用它了。

所以,这篇教程的核心,就是带你一步步掌握“如何使用Wea ve为跨主机的Docker容器搭建网络”。

Wea ve 是如何工作的

在Docker的容器之间设置网络设置网络通信的方法

先来捋清楚Wea ve的工作逻辑。它的核心,是创建一个由多个“对等节点”(peer)组成的虚拟网络。每个节点,其实就是一个运行在宿主机上的“Wea ve路由器”容器。这些路由器分布在不同的机器上,共同织成一张网。

这张对等网络内部,节点之间会通过TCP连接来同步拓扑信息,同时建立UDP连接,专用于容器间的实际数据通信。每个Wea ve路由器还会通过网桥(bridge)与本地宿主机上的其他Docker容器相连。关键的一步来了:当分属两台不同主机的两个容器想要“对话”时,发送方宿主机的Wea ve路由器会通过网桥截获数据包,然后用UDP协议将其封装起来,直接“快递”给接收方宿主机的Wea ve路由器。

更巧妙的是,每个Wea ve路由器会持续学习并刷新整个网络的拓扑,有点像传统交换机学习MAC地址的过程。它能知道哪个容器在哪,从而智能地决定数据包的下一跳该送往何处。只要两台宿主机都连接到了Wea ve网络中的同一个路由器(直接或间接),它们上面的容器就能互通。此外,Wea ve还支持使用公钥加密技术,为TCP和UDP数据包披上“盔甲”,确保通信安全。

准备工作

动手之前,你得确保所有计划加入的宿主机都已经装好了Docker环境。如果还没装,可以参考对应教程,在Ubuntu或者CentOS/Fedora系统上进行安装。

Docker就绪后,就可以通过下面几条命令来安装Wea ve了:

复制代码

代码如下:$ wget https://github.com/zettio/wea ve/releases/download/latest_release/wea ve

$ chmod a+x wea ve

$ sudo cp wea ve /usr/local/bin

注意,需要确保系统的PATH环境变量包含`/usr/local/bin`这个路径。通常,你可以在`/etc/profile`文件末尾添加一行(要使改动立即生效,记得执行一下`source /etc/profile`这个命令):

复制代码

代码如下: export PATH="$PATH:/usr/local/bin"

以上步骤需要在每一台计划加入Wea ve网络的宿主机上重复执行。

另外有个小细节:Wea ve会同时使用TCP和UDP的6783端口。如果系统防火墙是开启状态,请务必确保这两个端口是放行的。

在每台宿主机上启动 Wea ve 路由器

想让不同主机上的容器互通,第一步就是在每台机器上激活Wea ve路由器,把它们“邀请”进同一个虚拟网络。

从第一台宿主机开始。运行下面这条命令,系统会自动创建并启动一个Wea ve路由器容器(没错,这个路由器本身也是一个容器):

复制代码

代码如下: $ sudo wea ve launch

首次执行时,它会从网络下载Wea ve镜像,这可能需要一点时间。下载完成后,容器便会自动运行。成功启动后,终端会显示出这个路由器的ID号。

想查看它的状态?用这个命令:

复制代码

代码如下: $ sudo wea ve status

在Docker的容器之间设置网络设置网络通信的方法

好了,第一个Wea ve路由器已经就位。此时,整个对等网络里只有它一个成员。

当然,用熟悉的Docker命令也能看到它:

复制代码

代码如下:$ docker ps

在Docker的容器之间设置网络设置网络通信的方法

接下来配置第二台宿主机,步骤稍有不同。启动这台的Wea ve路由器时,需要指定第一台宿主机的IP地址,把它“介绍”进网络:

复制代码

代码如下:$ sudo wea ve launch

这时再查看路由器状态,你就会发现成员列表里已经有了两个peer:当前主机和第一台主机。

在Docker的容器之间设置网络设置网络通信的方法

随着更多路由器的加入,这个列表会越来越长。添加新节点时,请注意是指定网络中“前一台”宿主机的IP地址,而不一定是“第一台”,整个网络会以链状或网状的形态扩展。

至此,一个跨越不同宿主机的Wea ve网络就已经搭建完成了。

把不同宿主机上的容器互联起来

网络骨架有了,接下来就是在各个宿主机上启动Docker容器,并把它们接入这个虚拟网络。

假设我们规划一个私有网络`10.0.0.0/24`来连接所有容器,并为它们分配IP地址。

这里有个重要区别:如果你想创建一个能加入Wea ve网络的容器,就需要使用`wea ve run`命令,而不是直接的`docker run`。因为`wea ve run`会在后台调用Docker创建容器,并自动完成复杂的网络配置和接入。

例如,在宿主机hostA上,用下面的命令创建一个Ubuntu容器,将它放入`10.0.0.0/24`网络,并指定IP为`10.0.0.1`:

复制代码

代码如下: hostA:~$ sudo wea ve run 10.0.0.1/24 -t -i ubuntu

命令执行成功后,终端会返回容器的ID。你可以用这个ID附着到容器控制台:

复制代码

代码如下:hostA:~$ docker attach

接着,在宿主机hostB上,如法炮制创建另一个Ubuntu容器,分配IP地址`10.0.0.2`:

复制代码

代码如下:hostB:~$ sudo wea ve run 10.0.0.2/24 -t -i ubuntu

同样地,附着到它的控制台:

复制代码

代码如下:hostB:~$ docker attach

现在,神奇的事情发生了。分别在这两个容器的控制台里尝试互ping,你会发现它们已经可以畅通无阻地通信了。

在Docker的容器之间设置网络设置网络通信的方法

如果检查一下容器的网络配置,你会看到一块名为`ethwe`的网卡,上面正是你刚才分配的IP地址(例如`10.0.0.1`和`10.0.0.2`)。

在Docker的容器之间设置网络设置网络通信的方法

Wea ve 的其他高级用法

除了基础联网,Wea ve还提供了一些相当巧妙的高级特性,这里简单介绍一下。

应用分离

利用Wea ve,你可以创建多个彼此隔离的虚拟网络,将不同的应用群组分开。比如,可以为一组容器创建`10.0.0.0/24`网络,同时为另一组容器创建`10.10.0.0/24`网络,Wea ve会自动维护这些网络间的隔离。更灵活的是,你甚至可以在不重启容器的情况下,将它从一个网络“热迁移”到另一个网络。来看个具体操作:

首先,启动一个容器,让它运行在`10.0.0.0/24`网络上:

复制代码

代码如下:$ sudo wea ve run 10.0.0.2/24 -t -i ubuntu

然后,将它从当前网络分离:

复制代码

代码如下:$ sudo wea ve detach 10.0.0.2/24

最后,再将它附接到新的`10.10.0.0/24`网络:

复制代码

代码如下:$ sudo wea ve attach 10.10.0.2/24

在Docker的容器之间设置网络设置网络通信的方法

现在,这个容器就能够与`10.10.0.0/24`网络中的其他成员通信了。这在容器创建之初网络环境尚不明确时,显得格外有用。

将 wea ve 网络与宿主机网络整合起来

有些场景下,你可能希望虚拟网络中的容器能够访问物理主机网络,或者反过来,宿主机需要直接访问容器。Wea ve考虑到了这点,允许虚拟网络与宿主机网络进行整合。

举个例子,在宿主机hostA上,容器运行在`10.0.0.0/24`网络中。执行以下命令:

复制代码

代码如下: hostA:~$ sudo wea ve expose 10.0.0.100/24

这个命令会将IP地址`10.0.0.100`分配给宿主机hostA,相当于把hostA本身也变成了`10.0.0.0/24`网络上的一个节点。当然,选择的IP地址不能与已有的容器冲突。

如此一来,hostA就能够直接访问`10.0.0.0/24`网络中的所有容器了,无论这些容器是否运行在它自己身上。这个设计,确实巧妙。

总结

看到这里,你应该能体会到,Wea ve是一款功能强大且实用的Docker网络配置工具。本篇教程所介绍的,仅仅是它能力的冰山一角。如果你有兴趣继续深入,不妨探索一下它的其他特性:例如在多云(multi-cloud)环境下很有用的“多跳路由”功能;能够实现故障容错的“动态重路由”技术;或者它内置的分布式DNS服务,后者允许你直接用自定义名称来访问容器,非常方便。

来源:https://www.jb51.net/os/other/362737.html
上一篇如何在Windows 10中设置动态壁纸桌面 下一篇VirtualBox中使用Docker Machine来管理Docker主机
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
CentOS 7手动释放内存缓存的详细方法
系统平台 · 2026-07-13

CentOS 7手动释放内存缓存的详细方法

手动清理Linux内存缓存需先执行三次sync防丢数据。echo1清页缓存,echo2清目录与inode缓存,echo3全清但慎用。清理前依据available而非free判断内存压力,清理后关注available及swap使用率。

Mac菜单栏查看当前WiFi频率的实用方法
系统平台 · 2026-07-13

Mac菜单栏查看当前WiFi频率的实用方法

Mac无需第三方工具,按住Option键点击菜单栏Wi-Fi图标即可查看频率或信道;使用无线诊断工具的扫描信息可确认频段;系统报告中的PHYMode字段显示硬件级协商结果,三种方法覆盖从桌面快捷查看到底层验证。

CentOS 7系统默认语言修改方法
系统平台 · 2026-07-13

CentOS 7系统默认语言修改方法

CentOS7修改默认语言需先安装zh_CN UTF-8语言包,再通过localectl或 etc locale conf设置LANG为zh_CN UTF-8。修改后验证locale输出,注意避免LC_*变量覆盖,图形界面与日志可能需额外处理。

Linux查看具体磁盘逻辑卷管理组坏块屏蔽记录
系统平台 · 2026-07-13

Linux查看具体磁盘逻辑卷管理组坏块屏蔽记录

LVM本身不记录或管理坏块,坏块屏蔽由文件系统(如e2fsck将坏块列表写入超级块)和硬盘固件(如S M A R T 重映射)处理。用户需绕过LVM层,必须直接检查物理设备(如 dev sdb2)的坏块列表及重映射计数等信息,才能确认其屏蔽记录情况。

银河麒麟系统Prometheus安装配置方法详解
系统平台 · 2026-07-13

银河麒麟系统Prometheus安装配置方法详解

在银河麒麟系统上部署Prometheus,需先确认CPU架构(ARM64或AMD64),下载对应安装包,创建标准目录并解压。接着配置自监控,创建非root用户,手动启动验证。最后注册为systemd服务,实现开机自启。注意配置文件路径及权限设置。