容器虚拟网卡与网桥docker0虚拟网卡的veth pair的配对

编程之家收集整理的这篇文章主要介绍了容器虚拟网卡与网桥docker0虚拟网卡的veth pair的配对编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

一)基本知识:

Docker 安装时会自动在 host 上创建三个网络:none,host,和bridge;详细说明可参考其它文档。我们可用 docker network ls 命令查看:

基于DRIVER是bridge的网络都会有一个对应的linux bridge被创建:

认环境中,一个名为docker0的linux bridge自动被创建好了,其上有一个 docker0 内部接口,IP地址为172.17.0.1/16:

再用docker network inspect指令查看bridge网络:其Gateway就是网卡/接口docker0的IP地址:172.17.0.1。

总结起来:network的名字是bridge,而对应的linux bridge的名字是docker0。

 

二)容器创建时IP地址的分配:

Docker 创建一个容器的时候,会执行如下操作:

 • 创建一对虚拟接口/网卡,也就是veth pair,分别放到本地主机和新容器中;
 • 本地主机一端桥接到认的 docker0 或指定网桥上,并具有一个唯一的名字,如 vetha596da4;
 • 容器一端放到新容器中,并修改名字作为 eth0,这个网卡/接口只在容器的名字空间可见;
 • 从网桥可用地址段中(也就是与该bridge对应的network)获取一个空闲地址分配给容器的 eth0,并配置认路由到桥接网卡 vetha596da4。
完成这些之后,容器就可以使用 eth0 虚拟网卡来连接其他容器和其他网络。
如果不指定--network,创建的容器认都会挂到 docker0 上,使用本地主机上 docker0 接口的 IP 作为所有容器的认网关。

当有多个容器创建后,容器网络拓扑结构如下:

这时就会出现如何识别docker0的虚拟网卡和容器的对应关系,例如,图示中有两个容器和docker0中的两个接口:

 

三)容器和docker0的虚拟网卡的配对:

先在host中查看接口IP地址信息:

并没有IP地址,但接口名字后面有@ifxx的后缀。

再进入容器26ce9efe0412(镜像 ubuntu-with-iptool)中查看IP地址信息:

eth0中出现了编号4和后缀@if5的信息,隐约与主机中编号5和if4的接口有对应关系。

可以利用ethtool来确认这种对应关系:分别在host和container中运行指令"ethtool -S <interface>":

可以清楚地看出来:

host中index=5的接口/网卡vetha596da4的peer inferface index是4;

container中index=4的网卡eth0的peer interface index是5。

注:

1) 该方法同样适用于建立在其它bridge上的容器。

2) ethtool -S <interface>中如果interface名字带上后缀就会报错:

root@Ubuntu01:~# ethtool -S vetha596da4@if4
Cannot get stats strings information: No such device

 3) ethtool -i <interface>可查看interface的详细信息。

参考链接

https://www.cnblogs.com/CloudMan6/p/6220469.html
https://github.com/moby/moby/issues/14666
https://backreference.org/2013/06/20/some-notes-on-veth-interfaces/

小编说

以上是编程之家为你收集整理的容器虚拟网卡与网桥docker0虚拟网卡的veth pair的配对全部内容。

如果觉得编程之家网站内容还不错,欢迎将编程之家推荐给好友。

原文地址:https://blog.csdn.net/thlzjfefe" target="_blank" rel="noopener" title="thlzjfefe">thlzjfefe</a> <img class="article-time-img article-heard-img" src="https://csdnimg.cn/release/blo

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


docker 查看容器内的进程的操作命令 docker top:查看指定容器中所有正在运行的进程1.直接查看容器内的运行进程
docker network connect 网络ID 容器ID。注意:请使用第三步返回的容器ID替换命令中的【容器ID】,使用第二步中的IP Address替换命令中的【容器IP】。注意:请使用第一步返回的网络ID替换命令中的【网络ID】,使用第三步返回的容器ID替换命令中的容器ID。说明:当容器使用host网络模型,容器和宿主机共享网络命名空间,因此网络信息完全一致。注意:请使用前一步返回的网络ID替换命令中的【网络ID】。④验证第三步中的容器和第二步中的容器互通性。如图所示,返回网络ID。
但笔者又遇到另外一个问题,就是Docker中应用的日志,由于之前的失误默认通过root用户创建的,此时使用了testuser来启动应用程序,发现Docker无法启动,原因很简单testuser启动的应用无法向root创建的日志文件写日志。而问题的排查过程也很有意思,不仅涉及到了Docker的操作命令,也涉及到了Linux的一些基础知识,知识和技能就是在出现问题、解决问题的过程中增长的。既然找到问题的原因解决起来就比较容易了,下面记录一下解决问题及涉及到的一些Docker命令和Linux操作。
docker安装的方式可参考:linux(centos)中部署docker(步骤超全,含带一些发展史和一些概念)更换docker的镜像源:重启完可用docker info命令查看是否添加上等待拉取即可;拉取完成之后查看镜像3 创建Jenkins挂载目录并赋予权限3.1 稍后可以将docker内的目录挂载到此目录上,方便操作容器内文件夹而不需要进入容器3.2 为挂载目录赋予权限4 创建Jenkins容器并运行5 页面访问jenkinsjenkins运行中页面访问ip:port如:遇到
docker是云原生的入门知识,本文是博主云原生知识学习的开篇,讲解了docker的安装过程,其中遇到的问题也给出了具体的解决方案,希望能帮到自己和粉丝朋友们。
Docker官方的Docker Registry是一个基础版本的Docker镜像仓库,具备仓库管理的完整功能,但是没有图形化界面。
RabbitMQ官网地址如下图官网提供了两种安装RabbitMQ的方式,一种是docker版本,一种是各个操作系统下的安装方式,本文将演示Linux(centos)环境和docker两种方式!准备安装有Linux环境的服务器或者虚拟机,本文使用阿里云服务器,Linux版本为centos 7。
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件代理服务器,在BSD-like协议下发行。Nginx的特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。到这里我们Docker的相关文章就差不多完结了,接下来是Kubernetes的系列文章了,欢迎大家继续关注。
一)基本知识:Docker安装时会自动在 host上创建三个网络:none,host,和bridge;详细说明可参考其它文档。我们可用 docker network ls命令查看:基于DRIVER是bridge的网络都会有一个对应的linux bridge被创建:在默认环境中,一个名为docker0的linux bridge自动被创建好了,其上有一个 docker0内部接口,IP地址为172.17.0.1/16:再用docker network inspect指令查看brid...
原文连接:https://www.cnblogs.com/iiiiher/p/8135024.htmldocker0网络模型step by step将docker的ns软链到linux ns$ ln -s /var/run/docker/netns /var/run/netns查看ns,无$ ip netns $ 启动b1$ docker run -itd --...