4
3

More than 3 years have passed since last update.

Dockerのnetwork数上限はCIDRブロック指定で回避できる

Posted at

何の記事?

先日、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系のサブネットは上限を超えて作ることができませんでした。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3