「Docker」- 配置docker0网桥

  CREATED BY JENKINSBOT

问题描述

该笔记将记录:如何调整默认 docker0 网桥,以及相关问题的解决办法。

bridge and docker0

bridge

安装Docker之后,默认会创建桥接网络,网络名为bridge(当然还可以创建其他类型网络,参考「Docker networks feature」手册)

使用命令docker network inspect "bridge"查看该网络信息,以及使用该网络的容器。

docker0

在Docker中,默认会创建docker0网卡,它是网桥设备。如果启动容器时未指定网络,则所有容器会连接到该网桥,容器的所有流量会经过该网桥流向守护进程(Docker),由守护进程代表容器处理路由(此时Docker为网关,而docker0则为网关网卡,但这不是绝对的)。

网桥的网络配置与容器的网络配置

守护进程会为docker0配置网络地址、掩码、地址分配范围(从该地址范围为连接到该网桥的容器分配地址)。

如果有必要,你可以调整该配置,指定不同的最大传送单元(MTU)、网关地址、地址分配范围等等。

调整docker0参数,可以通过命令行指定选项实现,也可以通过修改/etc/docker/daemon.json配置实现。官方建议通过修改配置实现。

配置示例

如下为/etc/docker/daemon.json配置文件的示例内容:

{

  // 网桥(docker0)的网络地址及掩码,采用CIDR格式。
  "bip": "192.168.1.5/24",

  // 容器网络地址分配范围,必须是在网桥下的子网
  "fixed-cidr": "192.168.1.5/25",
  "fixed-cidr-v6": "2001:db8::/64",

  // MTU
  "mtu": 1500,

  // 连接到网桥的容器的默认网关,该网关控制流量路由
  // 通常无需设置,默认为bip的网络地址。
  // 但不能设置为与bip相同的地址,否则会产生「Address already in use」错误。
  "default-gateway": "10.20.1.1",
  "default-gateway-v6": "2001:db8:abcd::89",

  // DNS
  "dns": ["10.20.1.2","10.20.1.3"]
}

(注意,注释用于解释。由于JSON不支持注释,使用时应该去掉)

在修改配置后,需要重启Docker守护进程以生效。

查看网桥

在主机中使用brctl show命令查看网桥信息。

在每次启动容器时,守护进程会使用网桥的配置,选择可用的网络地址作为容器eth0网卡的地址,以及网络掩码。

当然也可以在命令行中,为容器指定网络地址。

容器访问外网

在默认下,主机是不会将容器中的浏览发送出去的,如果容器想要访问外网,需要配置ip_forward参数。

参考「Communicating to the outside world」手册。

参考文献

17.09/Customize the docker0 bridge
17.09/Docker container networking