🙌
新たなコンテナアプリを起動したところネットワーク関連エラーで起動できない
現象
ホスト中に互いに関係のないアプリケーションをたくさん作成している。30個をあたりで新たにアプリケーションを新築したところ、以下のようなエラーが発生して起動できなかった。
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個しか作れないようだ。
各ネットワークのレンジは以下のコマンドで調べることができる。
docker network inspect $(docker network ls -q) | grep -E "Subnet|Name"
クラスBとクラスCのプライベートアドレスが使用されている。
メモリが枯渇する前にネットワークが枯渇しようとは、想定外だった。
対応
限界突破のためには、既存のネットワークのレンジを狭めればよい。tomcatが1つ、データベースが1つのコンテナアプリに6万ものIPアドレスは不要。
Dockerのnetwork数上限はCIDRブロック指定で回避できるによるとCIDR指定で回避できるとのこと。
docker network inspect $(docker network ls -q) | grep Subnet | grep 172.33
で172以下を変更して出てこなければ使用可能。
docker network create <network名> --subnet=172.33.0.0/16
サブネットマスクは16ではなく24(28でもよさげ)にする。
docker network create <network名> --subnet=172.33.0.0/24
docker network create <network名> --subnet=172.33.1.0/24
docker-compose.ymlに指定する場合はdocker-compose up するときに subnet を指定するを参照。
Discussion