如何更改 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