Docker 默认的桥接网卡是 docker0。它只会在本机桥接所有的容器网卡,举例来说容器的虚拟网卡在主机上看一般叫做 veth*** 而 Docker 只是把所有这些网卡桥接在一起,如下:
[root@opnvz ~]# brctl show |
bridge name bridge id STP enabled interfaces |
docker0 8000.56847afe9799 no veth0889 |
veth3c7b |
veth4061 |
root@ac6474aeb31d:~# ip a |
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default |
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 |
inet 127.0.0.1/8 scope host lo |
valid_lft forever preferred_lft forever |
inet6 ::1/128 scope host |
valid_lft forever preferred_lft forever |
11: eth0: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 |
link/ether 4a:7d:68:da:09:cf brd ff:ff:ff:ff:ff:ff |
inet 172.17.0.3/16 scope global eth0 |
valid_lft forever preferred_lft forever |
inet6 fe80::487d:68ff:feda:9cf/64 scope link |
valid_lft forever preferred_lft forever |
如果在企业内部应用,或者做多个物理主机的集群,可能需要将多个物理主机的容器组到一个物理网络中来,那么就需要将这个网桥桥接到我们指定的网卡上。
主机 A 和主机 B 的网卡一都连着物理交换机的同一个 vlan 101,这样网桥一和网桥三就相当于在同一个物理网络中了,而容器一、容器三、容器四也在同一物理网络中了,他们之间可以相互通信,而且可以跟同一 vlan 中的其他物理机器互联。
下面以 ubuntu 为例创建多个主机的容器联网: 创建自己的网桥,编辑 /etc/network/interface 文件
auto br0 |
iface br0 inet static |
address 192.168.7.31 |
netmask 255.255.240.0 |
gateway 192.168.7.254 |
bridge_ports em1 |
bridge_stp off |
dns-nameservers 8.8.8.8 192.168.6.1 |
ubuntu 修改 /etc/default/docker 文件,添加最后一行内容
# 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="-b=br0" |
root@ubuntudocker:~# docker ps |
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES |
58b043aa05eb desk_hz:v1 "/startup.sh" 5 days ago Up 2 seconds 5900/tcp, 6080/tcp, 22/tcp yanlx |
root@ubuntudocker:~# brctl show |
bridge name bridge id STP enabled interfaces |
br0 8000.7e6e617c8d53 no em1 |
vethe6e5 |