問題背景
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已經在設置的範圍內,衝突問題解決。