问题描述
该笔记将记录:如何调整默认 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