Docker Compose Network Address Pools
记录一下Dock Compose使用中容易遇到的 Network Address Pool 的问题。
之前的文章中就提到过,当一台机器上用 Docker Compose 开启的 stack 太多的时候(也不需要很多,十几个左右,就容易产生 network reachability 的问题。甚至可能导致主机直接就不可访问的。
原因是 Docker 默认的第一个 Network Address Pool 用光了,而第二个 Pool 是 192.168 网段的。这个网段就容易和本地的LAN地址出现冲突。
这个Network Address Pool 可以通过 /etc/docker/daemon.json 配置。默认这个文件并不存在,但是其行为和下面这个 config 等效:
这个 config 的意思是:
- 第一个网络地址池:
- 每个网络都是 /16 大小的 (相当不小了)
- 所有网络的 base 都是 172.17.0.0/12
- 2^(16-12) -> 16 networks in total
- 考虑 docker 默认有一个 default bridge,最多也就只能有15个新的network。而每一个 Docker Compose (i.e. stack),都会创建至少一个 Network。有的可能还需要不止一个。
- 第二个地址池:
- Base: 192.168.0.0/16。同时每个 network 小很多,最多还是16个networks.
因此如果需要更多的 Docker compose stacks,那么最简单的做法就是修改这个 config:
{
"default-address-pools":
[
{"base":"10.10.0.0/16","size":24}
]
}
- 2^(24-16) -> 最多 256 个networks。对于一台主机(一台用来穷折腾玩自托管的主机)来说,应该是足够了。而代价就是每个 network 最多只有 255 个IP,不过对于仅仅随便跑跑简单的 stack,应该也是够了。
References: