如何更改 Docker 网桥默认的网段地址?
2019-05-07 by dongnan
环境
| 软件 | 版本 | 
|---|---|
| Ubuntu Server | 16.04 amd64 | 
| docker-ce | 18.09.5 | 
目标
调整 Docker 网桥(Docker0) 默认的网段地址,网络掩码由 172.17.0.1/16 更改为 172.17.0.1/24。
Docker 网络原理
当Docker 启动时, 会自动在主机上创建一个 docker0虚拟网桥, 实际上是Linux操作系统中的一个 bridge, 可以理解为一个软件交换机。
它会在挂载到它的网口之间进行转发。同时,Docker 随机分配一个本地未占用的私有网段(在 RFC1918 中定义)中的一个地址给 docker0接口。
比如典型的 172.17.0.1,掩码为 255.255.0.0。此后启动的容器内的网口也会自动分配一个同一网段(172.17.0.0/16)的地址。
当创建一个 Docker 容器的时候, 同时会创建了一对 veth pair 接口(当数据包发送到一个接口时,另外一个接口也可以收到相同的数据包)。
这对接口一端在容器内即eth0,另一端在本地并被挂载到 docker0 网桥 名称以 veth开头(例如 vethAQI2QT)。
通过这种方式主机可以跟容器通信,容器之间也可以相互通信。Docker就创建了在主机和所有容器之间一个虚拟共享网络。
网桥
brctl show
bridge name    bridge id        STP enabled    interfaces
docker0        8000.0242d7d882a0    no
网段
ip addr show docker0
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:d7:d8:82:a0 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
步骤
- 编辑配置文件
# 如果不存在则创建
vim /etc/docker/daemon.json
- 确保有 bip 选项
{
    "bip": "172.17.0.1/24"
}
- 重启 docker 服务
systemctl restart docker.service
验证
ip addr show docker0
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:2e:54:d3:48 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/24 brd 172.17.0.255 scope global docker0
valid_lft forever preferred_lft forever