在Docker的容器之间设置网络设置网络通信的方法
你也许已经知道了,Docker 容器技术是现有的成熟虚拟化技术的一个替代方案 如今,Docker容器技术早已不是新鲜概念,它正逐步成为传统虚拟化方案的一个高效替代品。越来越多的企业将其应用于快速环境部署、简化基础设施配置以及实现多客户环境隔离等场景。当你真的打算在生产环境中用Docker容器来部署应
你也许已经知道了,Docker 容器技术是现有的成熟虚拟化技术的一个替代方案
如今,Docker容器技术早已不是新鲜概念,它正逐步成为传统虚拟化方案的一个高效替代品。越来越多的企业将其应用于快速环境部署、简化基础设施配置以及实现多客户环境隔离等场景。当你真的打算在生产环境中用Docker容器来部署应用时,很可能会面临一个典型的复杂场景:需要启动多个容器,共同构成一套多层应用系统——比如,有的容器负责负载均衡,有的跑着LAMP栈,还有的专管数据库或用户界面。
于是,一个现实的问题就摆在了面前:当你有不止一台宿主机,并且无法预先确定容器会在哪台机器上创建时,如何保证这些分散在各处的容器能够顺畅地互相通信?
容器联网技术,有没有既可靠又省心的选择?答案是肯定的。在开源世界里,Wea ve算得上是个中翘楚。它能帮你省去大量手动配置的烦恼,用过之后你大概会感慨:早知道就用它了。
所以,这篇教程的核心,就是带你一步步掌握“如何使用Wea ve为跨主机的Docker容器搭建网络”。
Wea ve 是如何工作的

先来捋清楚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
好了,第一个Wea ve路由器已经就位。此时,整个对等网络里只有它一个成员。
当然,用熟悉的Docker命令也能看到它:
复制代码
代码如下:$ docker ps 
接下来配置第二台宿主机,步骤稍有不同。启动这台的Wea ve路由器时,需要指定第一台宿主机的IP地址,把它“介绍”进网络:
复制代码
代码如下:$ sudo wea ve launch这时再查看路由器状态,你就会发现成员列表里已经有了两个peer:当前主机和第一台主机。

随着更多路由器的加入,这个列表会越来越长。添加新节点时,请注意是指定网络中“前一台”宿主机的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,你会发现它们已经可以畅通无阻地通信了。

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

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 
现在,这个容器就能够与`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服务,后者允许你直接用自定义名称来访问容器,非常方便。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
CentOS 7手动释放内存缓存的详细方法
手动清理Linux内存缓存需先执行三次sync防丢数据。echo1清页缓存,echo2清目录与inode缓存,echo3全清但慎用。清理前依据available而非free判断内存压力,清理后关注available及swap使用率。
Mac菜单栏查看当前WiFi频率的实用方法
Mac无需第三方工具,按住Option键点击菜单栏Wi-Fi图标即可查看频率或信道;使用无线诊断工具的扫描信息可确认频段;系统报告中的PHYMode字段显示硬件级协商结果,三种方法覆盖从桌面快捷查看到底层验证。
CentOS 7系统默认语言修改方法
CentOS7修改默认语言需先安装zh_CN UTF-8语言包,再通过localectl或 etc locale conf设置LANG为zh_CN UTF-8。修改后验证locale输出,注意避免LC_*变量覆盖,图形界面与日志可能需额外处理。
Linux查看具体磁盘逻辑卷管理组坏块屏蔽记录
LVM本身不记录或管理坏块,坏块屏蔽由文件系统(如e2fsck将坏块列表写入超级块)和硬盘固件(如S M A R T 重映射)处理。用户需绕过LVM层,必须直接检查物理设备(如 dev sdb2)的坏块列表及重映射计数等信息,才能确认其屏蔽记录情况。
银河麒麟系统Prometheus安装配置方法详解
在银河麒麟系统上部署Prometheus,需先确认CPU架构(ARM64或AMD64),下载对应安装包,创建标准目录并解压。接着配置自监控,创建非root用户,手动启动验证。最后注册为systemd服务,实现开机自启。注意配置文件路径及权限设置。
- 热门数据榜
相关攻略
2025-11-23 21:09
2025-11-27 13:21
2025-11-12 13:57
2025-11-28 18:09
2025-11-18 22:43
2025-11-19 22:53
2025-11-19 16:57
2025-11-19 16:45
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程

