Docker - 虚拟网桥
容器的网络模式
- None --- 容器不能访问外部网络,内部存在回路地址。
- Container --- 将容器的网络栈合并到一起,可与其他容器共享网络。
- Host --- 与主机共享网络。
- Bridge --- 默认网络模式,通过主机和容器的端口映射(iptable转发)来通信。桥接是在主机上,一般叫docker0。
- 自定义网络 --- 主要是为了解决 docker 跨网络通信能力不足的问题和特殊网络需求问题。主要包括:桥接网络、插件网络和Overlay网络(原生的跨主机多子网模型)。
Docker安装后会创建自带的三种网络,可以通过docker network ls查看,通过docker network inspect查看详细信息。
[root@CentOS-7 ~]# docker network ls
NETWORK ID NAME DRIVER
08b080b94bcf bridge bridge
cff410b272fe none null
e818cf59d997 host host
[root@CentOS-7 ~]#
[root@CentOS-7 ~]# docker network inspect bridge
[
{
"Name": "bridge",
"Id": "08b080b94bcf5b8a651f27f6954d094eb6c41a200c969a8f80beb0b155655bd9",
"Scope": "local",
"Driver": "bridge",
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16"
}
]
},
"Containers": {},
"Options": {
"com.docker.network.bridge.default_bridge": "true",
"com.docker.network.bridge.enable_icc": "true",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
"com.docker.network.bridge.name": "docker0",
"com.docker.network.driver.mtu": "1500"
}
}
]
[root@CentOS-7 ~]#
虚拟网桥
Docker启动时,自动在主机上创建虚拟网桥docker0,并随机分配一个本地空闲私有网段的一个地址给docker0接口。
虚拟网桥docker0在内核层连通了其他的物理或虚拟网卡,将所有容器和本地主机都放到同一个网络。
docker0接口的默认配置包含了IP地址、子网掩码等,可以在docker服务启动的时候进行自定义配置。

[root@CentOS-7 ~]# ip addr show docker0
5: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
link/ether 02:42:41:3d:c1:6a brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:41ff:fe3d:c16a/64 scope link
valid_lft forever preferred_lft forever
[root@CentOS-7 ~]#
[root@CentOS-7 ~]# brctl show docker0
bridge name bridge id STP enabled interfaces
docker0 8000.0242413dc16a no veth06f0e1b
[root@CentOS-7 ~]#
[root@CentOS-7 ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
1d732a1c4f67 bridge bridge local
2e217e480705 host host local
c31d9a1acfc0 none null local
[root@CentOS-7 ~]#
[root@CentOS-7 ~]# docker network inspect bridge
[
{
"Name": "bridge",
"Id": "1d732a1c4f67d124eebfa1ccc19c299f9e0ed88f5f429f7bc5f4d6c263f9d599",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
}
]
},
"Internal": false,
"Containers": {},
"Options": {
"com.docker.network.bridge.default_bridge": "true",
"com.docker.network.bridge.enable_icc": "true",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
"com.docker.network.bridge.name": "docker0",
"com.docker.network.driver.mtu": "1500"
},
"Labels": {}
}
]
[root@CentOS-7 ~]#
容器的默认网络
Bridge是容器启动的默认网络模式。
当创建一个Docker容器时,容器会自动获得Bridge网段的一个空闲IP地址,并使用docker0接口的IP地址作为容器的默认网关,从而建立了主机和容器之间的一个虚拟共享网络。
主机可以跟容器通信,容器之间也可以相互通信。
容器通过docker0网桥以nat方式连接外网,外网通过端口映射(-p参数)连接到容器。
[root@CentOS-7 ~]# docker run -it -d --name test-network docker.io/ubuntu /bin/bash
7fb2253c974113452a534b0b423e5d62ca45243272f68f6f36726f3b71088816
[root@CentOS-7 ~]#
[root@CentOS7 ~]# ip link show |grep docker0
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT
7: veth6e8b8d1@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP mode DEFAULT
[root@CentOS7 ~]#
[root@CentOS-7 ~]# docker network inspect bridge
[
{
"Name": "bridge",
"Id": "1d732a1c4f67d124eebfa1ccc19c299f9e0ed88f5f429f7bc5f4d6c263f9d599",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
}
]
},
"Internal": false,
"Containers": {
"7fb2253c974113452a534b0b423e5d62ca45243272f68f6f36726f3b71088816": {
"Name": "test-network",
"EndpointID": "d434340768b76da42f9d61da848aa197111826c38eaca05886bca17c42123de3",
"MacAddress": "02:42:ac:11:00:02",
"IPv4Address": "172.17.0.2/16",
"IPv6Address": ""
}
},
"Options": {
"com.docker.network.bridge.default_bridge": "true",
"com.docker.network.bridge.enable_icc": "true",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
"com.docker.network.bridge.name": "docker0",
"com.docker.network.driver.mtu": "1500"
},
"Labels": {}
}
]
[root@CentOS-7 ~]#
[root@CentOS-7 ~]# docker attach test-network
root@7fb2253c9741:/#
root@7fb2253c9741:/# export http_proxy="http://10.144.1.10:8080"
root@7fb2253c9741:/#
root@7fb2253c9741:/# apt-get update
root@7fb2253c9741:/# apt-get install -yqq inetutils-ping
root@7fb2253c9741:/# apt-get install -yqq iproute
root@7fb2253c9741:/# apt-get install -yqq net-tools
root@7fb2253c9741:/#
root@7fb2253c9741:/# ifconfig -a
eth0 Link encap:Ethernet HWaddr 02:42:ac:11:00:02
inet addr:172.17.0.2 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::42:acff:fe11:2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:10951 errors:0 dropped:0 overruns:0 frame:0
TX packets:7358 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:26672806 (26.6 MB) TX bytes:495091 (495.0 KB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
root@7fb2253c9741:/#
root@7fb2253c9741:/# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.17.0.1 0.0.0.0 UG 0 0 0 eth0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
root@7fb2253c9741:/#
root@7fb2253c9741:/# ping 172.17.0.1
PING 172.17.0.1 (172.17.0.1): 56 data bytes
64 bytes from 172.17.0.1: icmp_seq=0 ttl=64 time=0.235 ms
64 bytes from 172.17.0.1: icmp_seq=1 ttl=64 time=0.254 ms
^C--- 172.17.0.1 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.235/0.244/0.254/0.000 ms
root@7fb2253c9741:/#
root@7fb2253c9741:/# ping www.bing.com
PING a-0001.a-msedge.net (204.79.197.200): 56 data bytes
64 bytes from 204.79.197.200: icmp_seq=0 ttl=108 time=205.742 ms
64 bytes from 204.79.197.200: icmp_seq=1 ttl=108 time=207.676 ms
^C--- a-0001.a-msedge.net ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max/stddev = 205.742/206.709/207.676/0.967 ms
root@7fb2253c9741:/# [root@CentOS-7 ~]#
[root@CentOS-7 ~]#
Docker - 虚拟网桥的更多相关文章
- 利用虚拟网桥实现Docker容器的跨主机访问
最近在研究Docker,Docker的网络配置是比较令人头疼的部分,尤其是跨主机的容器间通信,很多解决方案都比较复杂,这里,我只用虚拟网桥来实现Docker的跨主机访问,分享出来,希望对Docker学 ...
- 庐山真面目之十四微服务架构的Docker虚拟技术深入探究
庐山真面目之十四微服务架构的Docker虚拟技术深入探究 一.我的开场白 曾几何时,分布式的发展也影响了后来的微服务架构的实现方式.到了现在,只要涉及到互联网技术领域,就会设计一个概念,那就是微服务. ...
- 修改 Docker 默认网桥地址
在公司里搭建docker测试环境,需要访问内部的服务, 由于网段是172.17.导致该容器没有办法正常访问公司内部服务.翻了一下官方的帮助文档,找到了修改默认网桥地址的办法. 首先停止正在使用的 Do ...
- brctl和虚拟网桥
1 创建空的虚拟网桥 brctl addbr br0 这个时候可以认为该虚拟网桥有多个虚拟接口,但是没有实际的网卡接口和该虚拟网桥相连的. 2 将eth0网卡连接到br0 网卡只有一个接口,这个接口是 ...
- Docker 自定义网桥
除了默认的 docker0 网桥,用户也可以指定网桥来连接各个容器. 在启动 Docker 服务的时候,使用 -b BRIDGE或--bridge=BRIDGE 来指定使用的网桥. 如果服务已经运行, ...
- 修改docker自定义网桥后的默认网卡名称
[root@docker2 ~]# docker network create --subnet=10.10.10.0/24 docker1 #新键网桥docker142323044a4 ...
- centos/redhat 删除虚拟网桥virbr0
kvm虚拟化环境安装好后,ifconfig会发现多了一个虚拟网卡virbr0. 这是由于安装和启用了libvirt服务后生成的,libvirt在服务器(host)上生成一个 virtual netw ...
- Docker - 从零开始到操作
从零开始 介绍Docker的基本概念和命令,并给出简单使用示例和参考信息. Docker - 基础讲义 http://www.cnblogs.com/anliven/p/6281373.html Do ...
- Docker 容器与宿主机网段冲突导致网络无法 ping 通的解决方案
docker 容器网络默认使用 bridge 桥接模式,正常情况下,容器会使用 daemon.json 中定义的虚拟网桥来与宿主机进行通讯. 最近更新 Docker for mac 之后,发现以前容器 ...
随机推荐
- 【好记性不如烂笔头】死锁之java代码
死锁: 是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称 ...
- Linux之nc命令详解
nc是一个强大的网络工具,可以通过yum安装 [root@LB2 ~]# which nc /usr/bin/which: no nc in (/usr/local/sbin:/usr/local/b ...
- python3的urllib2报错问题解决方法
python urlib2 兼容问题 在python3中,将urllib和urllib2合并了,所以在使用urllib2的地方改成urllib.request即可.示例如下 import urllib ...
- 解决Highcharts 5.0.7,IE8下bar类型图表无法显示的问题
引用如上, 当图标类型为bar时,IE8无法直接显示, 官网也一样, 但通过切换图例可以显示, 所以加入以下代码解决此问题 未经允许,严禁转载!!!
- String 类的实现(3)引用计数实现String类
我们知道在C++中动态开辟空间时是用字符new和delete的.其中使用new test[N]方式开辟空间时实际上是开辟了(N*sizeof(test)+4)字节的空间.如图示其中保存N的值主要用于析 ...
- 老李分享:Android性能优化之内存泄漏1
老李分享:Android性能优化之内存泄漏 前言 对于内存泄漏,我想大家在开发中肯定都遇到过,只不过内存泄漏对我们来说并不是可见的,因为它是在堆中活动,而要想检测程序中是否有内存泄漏的产生,通常我 ...
- Centos7部署Zabbix
转载于http://www.cnblogs.com/xqzt/p/5124894.html,更正了部分错误,并增加了个别问题处理办法. 一.Zabbix简介 zabbix是一个基于WEB界面的提供分布 ...
- 【转载】关于c++中的explicit
按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示: class String { String ( const char* p ); ...
- 利用sub lr,lr,#4:程序是如何进行返回的?
1: ARM采用的是3级流水线 ARM的流水线结构为: 取指 -----> 译码 ------> 执行 ARM代码: PC PC- ...
- DOM Mutation Observer
源链接:http://www.jianshu.com/p/b5c9e4c7b1e1