指定 docker-compose 選用的 subnet

最近用到一些以 docker-compose 做為啟動服務方式的專案時,不小心因為它建立的 subnet 與我鏈路上的 private ip subnet 衝突,導致我就與 swarm 叢集斷線。於是上網找了幾個方案來避免用到這個 subnet:

方案一:修改 host routing table

一個簡單的方法,透過佔用某個 subnet,讓 docker-compose 無法選擇去使用它:

1
2
# 跳過 172.19.0.0/16
route add -net 172.19.0.0/16 gw 172.16.0.1

方案二:修改 docker-compose.yml

透過在 docker-compose.yml 中指定欲使用的 subnet 設定來達到 (需 docker-compose.yml 標記 VERSION 3 以上)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
version '3'
services:
nginx:
...
networks:
default:

networks:
default:
driver: bridge
ipam:
driver: default
config:
# 指定使用 172.28.0.0/16
- subnet: 172.28.0.0/16

References