问题背景
Docker启动时会在宿主机上创建一个docker0的虚拟网桥,默认网段为172.17.0.1/16,恰好公司内网VPN使用的是172.18网段,这就导致在使用docker-compose部署的服务时,自动生成的网桥很容易与内网冲突,导致服务无法访问。
解决思路
通过修改配置文件,把 docker0
指定其它网段,同时控制 docker-compose
创建容器时的网段范围。
具体步骤如下:
- 修改/etc/docker/daemon.json,添加以下配置(要配置的网段范围根据自身情况进行修改):
"bip": "192.18.0.1/24",
"default-address-pools": [
{
"base": "192.168.0.0/16",
"size": 24
}
]
踩坑:
- 较低版本的docker,不支持
default-address-pools
配置项,需要先升级Docker版本,具体方法参考此文。 - 如果只添加
bip
配置,则只会对docker0网桥生效,并不会对docker-compose新创建的容器生效;
- 删除所有不再使用中的docker网桥,并重启docker服务:
$ docker network prune
$ systemctl restart docker
- 启动容器,并查看网桥IP
$ docker-compose up -d
$ ifconfig
此时发现容器IP已经在设置的范围内,冲突问题解决。