piapia123
zh

Docker 守护进程地址池规划

网络

所有处理都在浏览器本地完成,数据不上传服务器

输出

规划 Docker 的地址分配:每个自定义网络用多大的子网、一共开多少个、从哪个池子里切。产物是一段可以直接粘进 /etc/docker/daemon.json 的片段,以及逐条列出的网段清单(每段给出可用地址数、能装多少容器、首尾可用地址)。 ⚠️ 不知道子网该开多大时,把「子网大小」选成自动,填「每个网络要装多少容器」,工具会挑一个能装下且最小的前缀。⚠️ 每个子网要留网络号、广播地址,Docker 的 bridge 还会再占 1 个当网关,所以 /24 只能放 253 个容器,不是 256 —— 自动选择已经把这三个地址算进去了。 ⚠️ 更重要的是冲突检查 —— Docker 自己已经占了几个网段(docker0 默认 172.17.0.0/16、默认地址池覆盖 172.16.0.0/12、bridge 网络默认从 172.18.0.0/16 起),池子落在这些范围里会和开箱配置打架,工具会逐条比对,也检查各子网之间有没有重叠。装不下时(子网比池子大,或网络数超过池子能切出的数量)会明确报出需要多大的前缀、第几个网络装不下。 需要的是 compose ↔ docker run 互转?那是另一个工具(「Compose 与 docker run 互转」)。全部计算在浏览器本地完成,生成结果不会上传。

功能

  • 生成可粘贴进 /etc/docker/daemon.json 的配置片段
  • 子网大小可选「自动」:按每个网络要装的容器数挑一个能装下且最小的前缀(已扣掉网络号、广播地址与 bridge 网关)
  • 逐条列出第几个网络用哪一段(按顺序从池里切),每段给出可用地址数、能装多少容器与首尾可用地址
  • 检查与 docker0、默认地址池、bridge 默认网段的重叠,以及各子网之间有没有重叠
  • 可选同时给出 bip(docker0 网桥地址)
  • base 带了主机位时指出规范的网络地址写法
  • ⚠️ 装不下时明确报错:子网比池子大时报出需要多大的前缀,网络数超了时报出第几个网络装不下、base 要放宽到哪一档
  • 全是本机计算,配置片段不离开浏览器

使用方法

  1. 选择每个网络的子网大小(自动、/16 到 /28)
  2. 选「自动」时填每个网络要装多少容器,其余情况跳过
  3. 填要开的网络数与地址池的 base
  4. 需要的话勾上 bip
  5. 复制 daemon.json 片段,或按网段清单逐个核对(要看 compose ↔ docker run 互转请用另一个工具)

常见问题

不知道怎么算子网大小?用「自动」
把「子网大小」选成自动,填「每个网络要装多少容器」,工具会挑一个能装下且最小的前缀。⚠️ 算法不是「容器数直接找 2 的幂」:每个子网要扣掉网络号与广播地址,Docker 的 bridge 还会再拿走 1 个当网关,所以能装的容器数是 2^(32−前缀) − 3。/24 只有 253 个容器的位置,要装 254 个就得开到 /23。⚠️ 自动选出的前缀上限是 /30 —— Docker 不接受 /31 与 /32 作为地址池的 size。
default-address-pools 与 bip 有什么区别?
bip 管的是默认网桥 docker0 自己的地址(出厂是 172.17.0.1/16);default-address-pools 管的是每次 docker network create 建的用户自定义 bridge 网络从哪里切、切多大。两者必须互不重叠,Docker 启动时会检查。
base 是 /16、size 是 /28,为什么不算错?
因为从 /16 的池子里切出 /28 的子网完全合法(能切 4096 个),Docker 官方例子就是 base /16 配 size /24。真正错的是反过来:size 的前缀比 base 还小(子网比池子大,装不下),或者要开的数量超过池子能切出的个数。本工具对前者报错,对「切出上千个」这种只是提醒确认。
为什么默认的 172.17.0.0/16 会提示冲突?
因为那正是 docker0 出厂占用的网段,也落在 Docker 默认地址池 172.16.0.0/12 里。想避开冲突,可以把 base 换到 10.0.0.0/8 里挑一段,例如 10.201.0.0/16。

相关工具