何の記事?
先日、dockerのnetworkを作ろうとしたときに次のエラーに遭遇しました。
Error response from daemon: could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network
調べたところ「docker networkを限界まで作る」という記事にもありますが、独自のdockerのnetworkはデフォルトで29個までしか作ることができないらしいことが何となく分かりました。
ちなみに、自分の環境では独自ネットワークを30個作ったところで限界を迎えていました(独自 + bridge + host + null = 33
)。
$ docker network ls | wc -l
33
ただし、CIDRブロックを指定することで限界突破できることがわかったので、知見を簡単にまとめることにしました。
※内部実装がどうなっているかみたいなことには触れません(知りません)。
環境
- Docker version 18.06.1-ce
- Amazon Linux 2
CIDRブロックを指定する
dockerのnetworkのCIDRブロックは何も指定しなければ、
172.*.0.0/16
192.168.*.0/20
のどちらかで作られます。
したがって、以下のようにして引っかからなければそのブロックを使用可能です。
docker network inspect $(docker network ls -q) | grep Subnet | grep 172.33
(ちなみに、*
の部分は連番になっているかと思い調べてみましたが、172系は連番になっていて、192.168系は連番になっていませんでした。)
使えるCIDRブロックが分かったらネットワークを作る際にオプションとして指定します。
docker network create qiita_test_nw --subnet=172.33.0.0/16
たったこれだけです。
ちなみに、network数を調べると限界突破できています。
$ docker network ls | wc -l
34
注意点
上のやり方が通用したのは172系のサブネットのみで、192.168系のサブネットは上限を超えて作ることができませんでした。