Docker 使用 OpenvSwitch 网桥

article/2025/9/22 0:02:35

Docker 默认使用的是 Linux 自带的网桥实现,实际上,OpenvSwitch 项目作为一个成熟的虚拟交换机实现,具备更丰富的功能。个人认为,将来 Docker 必然会支持 OpenvSwitch 作为其默认网桥实现。有兴趣的同学欢迎通过如下的步骤来尝鲜。

环境

在 Ubuntu 14.04 系统中进行测试。操作流程也适用于 RedHat/CentOS 系列系统,但少数命令和配置文件可能略有差异。

安装 Docker

安装最近版本的 Docker 并 启动服务。

$ sudo apt-get install apt-transport-https
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
$ sudo bash -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"
$ sudo apt-get update
$ sudo apt-get install lxc-docker
$ sudo service docker start

此时,Docker 服务会创建一个默认的 docker0 网桥,作为连接容器的本地网桥,可以通过如下命令查看:

$ sudo brctl show
bridge name     bridge id               STP enabled     interfaces
docker0         8000.000000000000       no

网桥 docker0 内部接口的默认地址为 172.17.42.1。

$ ifconfig docker0
docker0   Link encap:Ethernet  HWaddr 56:84:7a:fe:97:99  inet addr:172.17.42.1  Bcast:0.0.0.0  Mask:255.255.0.0BROADCAST MULTICAST  MTU:1500  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

安装 OpenvSwitch

通过如下命令安装 OpenvSwitch。

$ sudo aptitude install openvswitch-switch

测试添加一个网桥 br0 并查看。

$ sudo ovs-vsctl add-br br0
$ sudo ovs-vsctl show
20d0b972-e323-4e3c-9e66-1d8bb57c7ff5Bridge ovs-brPort ovs-brInterface br0type: internalovs_version: "2.0.2"

配置容器连接到 OpenvSwitch 网桥

目前 OpenvSwitch 网桥还不能直接支持挂载容器,需要手动在 OpenvSwitch 网桥上创建虚拟网口并挂载到容器中。

创建无网口容器

启动一个 ubuntu 容器,并指定不创建网络,后面我们手动添加网络。较新版本的 Docker 默认不允许在容器内修改网络配置,需要在 run 的时候指定参数 --privileged=true。

$ sudo docker run --net=none --privileged=true -it ubuntu:14.04 bash
root@298bbb17c244:/#

记住这里容器的 id 为 298bbb17c244。

此时在容器内查看网络信息,只能看到一个本地网卡 lo。

root@298bbb17c244:/# ifconfig
lo        Link encap:Local Loopback  inet addr:127.0.0.1  Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING  MTU:65536  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

手动为容器添加网络

下载 OpenvSwitch 项目提供的支持 Docker 容器的辅助脚本 ovs-docker。

$ wget https://github.com/openvswitch/ovs/raw/master/utilities/ovs-docker
$ sudo chmod a+x ovs-docker

为容器添加网卡,并挂载到 br0 上,命令为

$ sudo ./ovs-docker add-port br0 eth0 298bbb17c244

添加成功后,在容器内查看网络信息,多了一个新添加的网卡 eth0,但是默认并没有 IP 地址。

root@298bbb17c244:/# ifconfig
eth0      Link encap:Ethernet  HWaddr 7e:df:97:ac:1a:6a  inet6 addr: fe80::7cdf:97ff:feac:1a6a/64 Scope:LinkUP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:22 errors:0 dropped:0 overruns:0 frame:0TX packets:6 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:3197 (3.1 KB)  TX bytes:508 (508.0 B)lo        Link encap:Local Loopback  inet addr:127.0.0.1  Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING  MTU:65536  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

手动给它添加一个,例如 172.17.0.2/16,并查看。

root@298bbb17c244:/# ifconfig eth0 172.17.0.2/16
root@298bbb17c244:/# ifconfig 
eth0      Link encap:Ethernet  HWaddr ae:3d:75:2c:18:ba  inet addr:172.17.0.2  Bcast:172.17.255.255  Mask:255.255.0.0inet6 addr: fe80::ac3d:75ff:fe2c:18ba/64 Scope:LinkUP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:187 errors:0 dropped:2 overruns:0 frame:0TX packets:11 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:33840 (33.8 KB)  TX bytes:1170 (1.1 KB)lo        Link encap:Local Loopback  inet addr:127.0.0.1  Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING  MTU:65536  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

在容器外,配置 OpenvSwitch 的网桥 br0 内部接口地址为 172.17.42.2/16(只要与所挂载容器 IP 在同一个子网内即可)。

$ sudo ifconfig br0 172.17.42.2/16

测试连通

经过上面步骤,容器已经连接到了网桥 br0 上了,拓扑如下所示。

容器(172.17.0.2/16)<--> br0 网桥 <--> br0 内部端口(172.17.42.2/16)

此时,在容器内就可以测试是否连通到网桥 br0 上了。

root@298bbb17c244:/# ping 172.17.42.2
PING 172.17.42.2 (172.17.42.2) 56(84) bytes of data.
64 bytes from 172.17.42.2: icmp_seq=1 ttl=64 time=0.874 ms
64 bytes from 172.17.42.2: icmp_seq=2 ttl=64 time=0.079 ms
^C
--- 172.17.42.2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.079/0.476/0.874/0.398 ms

在容器内也可以配置默认网关为 br0 接口地址。

root@298bbb17c244:/# route add default gw 172.17.42.2

另外,删除该接口的命令为

$ sudo. /ovs-docker del-port br0 eth0 <CONTAINER_ID>

实际上,Docker 社区也已经有讨论对 OpenvSwitch 的支持了。 在 Docker 原生支持 OpenvSwitch 之前,用户可以通过编写脚本或更高级的工具来让这一过程自动化。

参考:

  • OpenvSwitch https://github.com/openvswitch/ovs


 转载请注明:http://blog.csdn.net/yeasy/article/details/42555431 

http://chatgpt.dhexx.cn/article/TnZ77XtB.shtml

相关文章

OpenvSwitch完全使用手册

OpenvSwitch完全使用手册(一)-总览Overview 本文主要参考Overview of functionality and components以及Frequently Asked Questions以及结合自己的理解。 1 什么是OpenvSwitch OpenvSwitch&#xff0c;简称OVS是一个虚拟交换软件&#xff0c;主要用于虚拟机VM环境&#xff0c;…

iOS远程真机之wdaproxy使用指南

基于 WebDriverAgent 的 iOS 远程控制 WebDriverAgent 安装使用完全指南 一、命令行启动wdaproxy 在浏览器打开http://localhost:8100 问题:WDA未启动 WDA安装依赖报错:

openxxx

环境规划 主机名内网ip外网ip网卡模式角色yfm20172.16.10.190192.168.199.122NAT、LANOpenxxxx-Serveryfm22172.16.10.191LAN内网机器1yfm21192.168.199.121NATOpenxxxx-Clientwindows192.168.0.106WIFIOpenxxxx-Client 软件版本 Linux 安装&#xff1a;openxxxx-2.4.10.tar…

windows 下vscode+platformio开发stm32f103c8t6最小系统

最近想要写个更新航模接收机固件的小项目&#xff0c;移植opentx项目的部分代码到我的最小系统板上。不经意间发现vscode上也可以开发stm32了&#xff0c;于是&#xff0c;一个填坑行动开始了&#xff01;&#xff01;&#xff01; 先写怎么才能编译调试吧&#xff01; 环境&a…

Open vSwitch详解

1. Open vSwitch简介 Open vSwitch(简称OVS)是在开源的Apache2.0许可下的产品级质量的多层虚拟交换标准。它旨在通过编程扩展,使庞大的网络自动化(配置、管理、维护),同时还支持标准的管理接口和协议。总的来说,它被设计为支持分布在多个物理服务器。OVS适用于VM环境中提…

英伟达Nvidia TX1 TX2 串口通信方法

Nvidia TX1 TX2 串口通信方法 英伟达TX2串口串口硬件板子串口描述硬件连接方式测试工具及方法c通信代码 英伟达TX2串口 使用英伟达嵌入式板进行 串口通信 。 串口硬件 串口位置为下图中红色方框位置&#xff0c;标示UARTQ20和J17。 板子串口描述 串口共6个引脚&#xff0…

Open vSwitch

1 OpenVSwitch 1.1 简介 OpenvSwitch简称OVS,是一个高质量的、多层虚拟交换机&#xff0c;使用开源Apache2.0许可协议&#xff0c;由Nicira Networks开发&#xff0c;主要实现代码为可移植的C代码。它的目的是让大规模网络自动化可以通过编程扩展,同时仍然支持标准的管理接口…

TX12 + ExpressLRS 915MHz RC控制链路配置及问题汇总

TX12 ExpressLRS 915MHz RC控制链路配置及问题汇总 1. 硬件配置1.1 TX12遥控器1.2 发射/接受机 2. 问题汇总2.1 ELRS接收机无法点亮(第一次)2.2 ELRS接收机无法点亮(第二次)2.3 触发EdgeTX固件更新2.4 elrsV2.lua脚本执行失败2.5 ELRS发射机和接收机如何对频2.6 ELRS接收机LED…

DIY基于树莓派的OpenTX航模遥控器(一)

【前言】 在正式讨论OpenTX遥控器之前&#xff0c;先罗列一下自己以往DIY遥控器的经历&#xff0c;正是通过这些不断摸索逐步积累了DIY的经验&#xff0c;以及大部分的驱动代码。基于对Python的热爱&#xff0c;所有制作都是基于Python编程的&#xff0c;虽然对于实时运行系统…

stm32f429 pcb 原理图工程文件 OPENTX遥控器可用

stm32f429 pcb 原理图工程文件 OPENTX遥控器可用。拍下只发stm32f429 pcb工程文件。id664624938682&

基于opentx开源软件,DIY属于自己的uav遥控器

硬件方面&#xff1a;开关&#xff0c;自稳按钮&#xff0c;方向控制遥感&#xff0c;油门遥感&#xff0c;一键降落按钮&#xff0c; 1.根据开源源码找到引脚对应功能&#xff0c;以及实际各模块&#xff0c;按钮等&#xff0c;进行原理图的绘制&#xff0c;出个初板 2…

EdgeTX/OpenTX逻辑开关教程

目录 一、介绍 二、Taranis遥控的逻辑开关屏幕示例 三、Companion软件中的逻辑开关界面 四、开关功能 一、介绍 如果是T-Pro也可先学习本文的逻辑开关原理&#xff0c;这样在进行双击解锁/长按上锁的设置就得心应手了。 ⼿动激活开关标记为 SA 到 SH。在本文示例中SF 是两…

OpenTX学习笔记

一 OpenTX 开源的无线电遥控系统 二 文件夹结构 1 FIRMWARE 您可以将模块或无线广播设备的固件放在此文件夹中。此文件夹中的文件不会自动应用。 2 IMAGES 2.2:BMP重命名为图像&#xff08;IMAGES&#xff09;&#xff0c;以保持Taranis和Horus之间的一致性。您可以将模型和其…

ping通说明什么

ping是icmp ping通说明 网络层&#xff0c;链路层没问题

虚拟机可以ping通主机,主机无法ping通虚拟机的解决方法

虚拟机可以ping通主机&#xff0c;主机无法ping通虚拟机的解决方法 关闭虚拟机防火墙 关闭防火墙后就可以ping通了 如何还无法ping通&#xff0c;将虚拟机重新启动后再尝试。 再次要ping 虚拟机的时候又ping不通了&#xff0c;搞了好久终于发现&#xff0c;只要将网络连接…

Ubuntu无法ping通百度

1 问题 ubuntu在使用ping baidu.com命令时出现未知的服务或名称 2 解决 修改/etc/network/interfaces文件 修改完成之后保存退出 重启网卡 /etc/init.d/networking restart

VirtualBox主机与虚拟机互相ping通的方法

一般情况下&#xff0c;按照VirtualBox默认的配置&#xff0c;主机可以ping通虚拟机&#xff0c;但虚拟机不能ping通主机。需要两端都能ping通的话&#xff0c;需要按照以下配置&#xff1a; 1、连接方法选择“仅主机(Host-Only)网络”。 2、在高级部分&#xff0c;控制芯片不…

为什么 A 能 ping 通 B,B 却不能 ping 通 A ?

有开发小哥咨询了一个问题&#xff0c;记录一下处理过程分享给有需要的朋友。 问题如下&#xff1a; A、B 两台开发服务器连接交换机&#xff0c;并且 A、B 两台服务器的 IP 地址设置为同一个网段&#xff0c;却发现 A 能 ping 通 B &#xff0c;B 却不能 ping 通 A 。 如图&am…

网络何时能ping通?什么情况下不能ping通?

1. 在同一网段内 假设电脑A、B均在192.168.0.X的网络内&#xff0c;两台电脑不需要额外的设置&#xff0c;就可以互相ping通。如果ping不通&#xff0c;可能的原因是&#xff1a; 目标主机的防火墙没关闭目标主机有电脑管家/360等防护软件 2. 在不同网段 如上图&#xff0c;…

主机与虚拟机ping通

主机与虚拟机ping通&#xff0c;之前上课按老师的配置一步一步来&#xff0c;都忘带了脑子&#xff0c;这次自己也可以实现配置自由了。 1.第一步&#xff0c;查看主机ip&#xff0c;cmd->ipconfig 2.设置虚拟机&#xff0c;同一网段 子网ip:我设置为192.168.172.0 子网掩码…