在默认安装情况下, Docker 会在宿主机上创建一个名为 docker0 的 Linux 网桥设备。该网
桥设备拥有一个私有网络地址及其所属子网。

分配给 docker0 网桥的子网地址为

  • 172.[17-31].42.1/16
  • 10.[0-255].42.1/16
  • 192.168.[42-44].1/24

中第一个没有被占用的子网地址。因此,很多时候你的 docker0 网桥设备的地址都是 172.17.42.1。所有容器都会连接到该网桥设备上,并从中分配一个位于子网 172.17.42.0/16 中的 IP 地址。容器链接到网桥的网络接口会把 docker0 网络设备作为网关。

创建新容器时, Docker 会创建一对网络设备接口,并将它们放到两个独立的网络命名空间:一个网络设备放到容器的网络命名空间(即 eth0);另一个网络设备放到宿主机的网络命名空间,并连接到 docker0 网桥设备上。

通过Pipework理解容器网络

Pipework 能实现的功能几乎都内置在 Docker 中了,但是 Pipework 工具可以对 Docker 网络进行逆向工程。以便更深入了解容器之间以及容器与外部之间是如何通信的

1、启动容器,并下载pipework

2、--net=none 选项启动一个不带网络功能的容器

root@foobar-server:~# docker run -it --rm --net none --name cookbook ubuntu:14.04 bash

这个容器只有一个本地环回设备,没有其他网络设备,也没有路由信息。如果需要和外部通信,只能手动进行设置。

pipework脚本可以帮我们做这件事情。

3、使用 Pipework 来创建一个完整的网络

root@foobar-server:/vagrant# ./pipework br0 nettest 192.168.1.10/24@192.168.1.254
Warning: arping not found; interface may not be immediately reachable

此时在容器中已经可以看到eth1 设备已启用,并且路由信息已经设置好。

这条命令完成如下四个步骤

• 在宿主机上创建网桥设备 br0。
• 分配 IP 地址 192.168.1.254。
• 在容器内部创建一个网络接口,并为其分配 IP 地址 192.168.1.10。
• 最后在容器内部添加路由信息,将网桥设置为默认网关。

4、查看该 Docker 主机上的网络设备列表

除了默认的 docker0 网桥设备,还会看到多出来一个 br0 设备

root@foobar-server:/vagrant# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group defaultlink/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000link/ether 08:00:27:5f:bb:e6 brd ff:ff:ff:ff:ff:ffinet 10.0.2.15/24 brd 10.0.2.255 scope global eth0valid_lft forever preferred_lft foreverinet6 fe80::a00:27ff:fe5f:bbe6/64 scope linkvalid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group defaultlink/ether 56:84:7a:fe:97:99 brd ff:ff:ff:ff:ff:ffinet 172.17.42.1/16 scope global docker0valid_lft forever preferred_lft forever
4: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group defaultlink/ether 62:c5:12:b3:dc:2f brd ff:ff:ff:ff:ff:ffinet6 fe80::f011:baff:fe81:370c/64 scope linkvalid_lft forever preferred_lft forever
6: veth1pl7218: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000link/ether 62:c5:12:b3:dc:2f brd ff:ff:ff:ff:ff:ffinet6 fe80::60c5:12ff:feb3:dc2f/64 scope linkvalid_lft forever preferred_lft forever
root@foobar-server:/vagrant#

5、 查看网桥信息

bridge-utils 软件包的 brctl 命令

下面胡原始股由 pipework 创建并连接到 br0 的虚拟以太网接口

此时宿主机上就可以访问容器。也可以在容器内访问其他容器了

6、如何访问宿主机之外的网络?

缺少NAT 地址转换规则,而这个 NAT 地址转换(伪装)规则在默认情况下会由 Docker 自动添加。在Docker 宿主机上添加相应的 iptables 规则

添加NAT规则

iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -j MASQUERADE

访问外网

宿主机上docker0 Linux 网桥设备是怎么来的?相关推荐

  1. 【博客455】Linux网桥如何接管attach上来的设备的流量

    Linux网桥如何接管attach上来的设备的流量 先讲讲linux网桥 网桥是在内核中虚拟出来的,可以将主机上真实的物理网卡(如eth0,eth1),或虚拟的网卡(tap0,tap1,vnet0,v ...

  2. linux端口转发_详解Linux网桥功能--概念、工作机制、相关命令及实例说明

    概述 在说Linux网桥之前,先介绍几个概念,有助于对网桥的功能及实现有更深的理解. 一个交换网络的逻辑图: 1. 冲突域 一个冲突域由所有能够看到同一个冲突或者被该冲突涉及到的设备组成.以太网使用C ...

  3. linux协议栈网桥部分之cam表操作,Docker网络基础 - Linux网桥工作原理与实现

    本文转载自微信公众号「Linux内核那些事」,作者songsong001 .转载本文请联系Linux内核那些事公众号. Linux 的 网桥 是一种虚拟设备(使用软件实现),可以将 Linux 内部多 ...

  4. linux 网桥br0配置

    网桥 桥接:把一台机器上的若干个网络接口"连接"起来.其结果是,其中一个网 口收到的报文会被复制给其他网口并发送出去.以使得网口之间的报文能够互 相转发.网桥就是这样一个设备,它有 ...

  5. 理解Linux TunTap设备

    入门 TUN/TAP是操作系统内核中的虚拟网络设备,可以完成用户空间与内核空间的数据的交互.网络协议栈中的数据通过该设备可以进入到用户空间中,而用户空间中的程序通过该设备空间进入到内核空间的网络协议栈 ...

  6. Linux网桥简介、入门与配置

    本文目录 1.通常的局域网络结构 2.Linux网桥的功能 3.在ubuntu下如何使用netplan配置一个网桥 4.最后构建出如下网络: 5.Linux网桥的作用 开始之前先得介绍一下什么是网桥, ...

  7. linux 网桥迁移命令,Linux 网桥配置命令: brctl

    Linux网关模式下将有线LAN和无线LAN共享网段实现局域网内互联: brctl addbr bridge brctl addif bridge eth0 brctl addif bridge at ...

  8. linux 统一设备模型 pci,Linux设备驱动模型摘抄

    Linux设备驱动模型摘抄Linux设备驱动模型摘抄Linux设备驱动模型摘抄Linux设备驱动模型摘抄Linux设备驱动模型摘抄 Linux设备驱动模型摘抄(1) Linux统一设备模型 简介 Li ...

  9. linux虚拟机上不了王,虚拟机上安装Linux时出现的问题及解决方法

    虚拟机上安装Linux时出现的问题及解决方法 1.在VMWare Workstation中RedHat Error: no usable disks had been found! 原来一般Linux ...

  10. 虚拟机上的Linux学习

    title: 虚拟机上的Linux学习 date: 2018-08-08 15:48:28 updated: tags: [Linux,学习笔记] description: keywords: com ...

最新文章

  1. go语言中的big包
  2. Objective-C:MRC(引用计数器)在OC内部的可变对象是适用的,不可变对象是不适用的(例如 NSString、NSArray等)...
  3. 一致性hash算法虚拟节点_Hash算法和一致性Hash算法
  4. 阿里云云原生一体化数仓正式发布 助力企业数据驱动业务创新
  5. 使用权值衰减算法解决神经网络过拟合问题、python实现
  6. CListCtrl行高问题最终解决方法
  7. [转载] python pandas.read_csv读取大文件
  8. 对称正定矩阵的Cholesky分解
  9. spring boot面试问题集锦
  10. 在matlab中如何线性回归分析,MATLAB工具箱中进行多元线性回归分析的命令为 ( )?...
  11. python图像坐标系_世界坐标系、相机坐标系和图像坐标系的转换(Python)
  12. C语言小写转大写,小写字母转换成大写字母!
  13. C语言,switch语句系列
  14. 中文解释“GetLastError()返回值”---错误码大全
  15. 指数函数误差平方和matlab,数值分析与实验数学081 张燃 3080801119).doc
  16. 电脑使用技巧提升篇9:使用360压缩软件文件加密
  17. 警醒篇:如何做人?(转载)
  18. 【密码学】DES加解密原理及其Java实现算法
  19. php微信开发查询分组,微信开发之用户组的介绍
  20. layui数据表格显示序号

热门文章

  1. 中小企业(OA)办公系统方案 huangai[VA]
  2. python爬虫-计算机要点
  3. 数据挖掘实例1:亲和性分析示例(代码、注释、运行结果)
  4. python直方图解释_python直方图1 lin
  5. Windows10虚拟机安转(详细版)
  6. mysql创建数据库_MySQL创建数据库的两种方法
  7. Tampermonkey油猴插件——安装与使用教程
  8. 网页实现数据库表信息的CRUD操作
  9. 美通企业日报 | 凯悦集团将在华新开5家奢华酒店;铁姆肯庆祝成立120周年
  10. 戴尔G5 5590重装系统