初识DOCKER(12)–桥接网卡

为了更方便地利用docker中实例所提供的服务,可以将实例接入外部网络,从而获得和宿主机相同网段的IP地址,这部分功能通过网桥来实现。由于网络配置方面各平台不一致,以下以Ubuntu为例

首先需要为系统创建一个网桥bridge0,该网桥桥接至物理网卡eth0,此时网卡eth0处于promiscuous模式,因而原先对eth0配置的网络参数需要向bridge0上配置。具体操作如下:

修改 /etc/network/interface ,将原先的eth0端口相关的配置全部注释,然后如下图填写

auto lo
iface lo inet loopback
 
# 主网络适配器,由于该适配器已连接到网桥,因此将其设置全部注释
#auto eth0
#iface eth0 inet static
#address 192.168.71.33
#netmask 255.255.255.0
#gateway 192.168.71.10
#dns-nameservers 192.168.5.8 192.168.5.9
 
# 设置网桥
auto bridge0
# 网桥使用静态地址
iface bridge0 inet static
# 绑定到物理网卡eth0
bridge_ports eth0
# 不需要生成树协议
bridge_stp off
birdge_maxwait 0
bridge_fd 0
# 设置网络参数,与原先外网连接eth0的设置一致
address 192.168.71.33
netmask 255.255.255.0                                      blog.nvacg.org版权所有
gateway 192.168.71.10
dns-nameservers 192.168.5.9 192.168.5.8

重启宿主机后可以看到新建的网桥bridge0,并在bridge0上可以看到网络中的IP地址

#ifconfig
bridge0   Link encap:Ethernet  HWaddr 00:0c:29:22:0c:3a
inet addr:192.168.71.33  Bcast:192.168.71.255  Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe22:c3a/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:8032 errors:0 dropped:0 overruns:0 frame:0
TX packets:384 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:859589 (859.5 KB)  TX bytes:37499 (37.4 KB)
 
eth0      Link encap:Ethernet  HWaddr 00:0c:29:22:0c:3a
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:29101 errors:0 dropped:1 overruns:0 frame:0
TX packets:412 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:6607533 (6.6 MB)  TX bytes:40987 (40.9 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:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0                                                    blog.nvacg.org版权所有
RX bytes:480 (480.0 B)  TX bytes:480 (480.0 B)

随后修改docker配置文件 cat /etc/default/docker 加入 —bridge=桥名称 参数

# Docker Upstart and SysVinit configuration file
 
# Customize location of Docker binary (especially for development testing).
#DOCKER="/usr/local/bin/docker"
 
# Use DOCKER_OPTS to modify the daemon startup options.
#DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
 
# If you need Docker to use an HTTP proxy, it can also be specified here.
#export http_proxy="http://127.0.0.1:3128/"
 
# This is also a handy place to tweak where Docker's temporary files go.
#export TMPDIR="/mnt/bigdrive/docker-tmp"
DOCKER_OPTS="--storage-driver=overlay --graph=/data/docker_instance --bridge=bridge0"

现在启动一下实例看看

#docker run -it --name main centos:centos6
0;@3373bfcf967c:/[root@3373bfcf967c /]# ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:AC:10:47:04
inet addr:192.168.71.4  Bcast:0.0.0.0  Mask:255.255.255.0
inet6 addr: fe80::42:acff:fe10:4704/64 Scope:Link
UP BROADCAST RUNNING  MTU:1500  Metric:1
RX packets:16 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2054 (2.0 KiB)  TX bytes:508 (508.0 b)
 
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                                        blog.nvacg.org版权所有
RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

可见,此时实例已经取得上级网络的网络地址。如果无法解析域名,可以使用 iptables -F修复。

对于需要设置固定IP的场合,可以先使用--net=none参数启动容器或镜像后经由pipework分配静态IP的方式。
pipework的命令行格式为:

pipework docker0 容器名称或容器ID 你要设置的IP地址/24@网关地址

 


  请注意,本站的所有文章均要求阁下在转载时注明出处和原作者,阁下转载本站文章即表示阁下同意并遵守此规程,除非特别注明转载出处,否则文章即为其发布者所著。本站及文章作者保留文章的著作权并有权在阁下违反上述规程时予以追究。

本文链接地址: 初识DOCKER(12)–桥接网卡

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*