🙌

新たなコンテナアプリを起動したところネットワーク関連エラーで起動できない

2021/11/23に公開

現象

ホスト中に互いに関係のないアプリケーションをたくさん作成している。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