icon

nazo6.dev

一覧に戻る
2024/5/23 3 min read

DockerでIPアドレスが枯渇した時の対処法

この記事はZennにも投稿しています

目次


DockerでIPアドレスが枯渇した時の対処法


自宅サーバーでdocker-compose upをしたとき

could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network

というエラーが出ました。どうやらデフォルトの設定ではIPアドレスが使い果たされてしまうため30個以上のネットワークをDockerで作ることができないみたいです。 ググったところdocker network pruneなどの解決策が出てきましたが実際に30個のネットワークを使っているのでこれでは意味がありません。

根本から解決するには、1ネットワークあたりのIPアドレスを少なくするように変更する必要があります。

これはネットワークにアドレスを設定することで可能です。例えば以下の記事ではそのようにやっています。

ですが今後のために今回はdockerの設定を変更することにしました。Dockerのdefault-address-poolsという設定を変更することでdocker compose upで作られるネットワークのデフォルト設定をすることができます。

デフォルトではdockerのdefault-address-poolsは以下のようになっています(実際にこういう設定が記述されているわけではありませんが概念としてはこうなります)。

  "default-address-pools" : [
    {
      "base" : "172.17.0.0/12",
      "size" : 16
    },
    {
      "base" : "192.168.0.0/16",
      "size" : 20
    }
  ]

これは1ネットワークあたり最大で/16という巨大領域を割り当てています。1コンテナに対してこれは明らかに過剰なので減らしてしまいましょう。

  "default-address-pools" : [
    {
      "base" : "172.17.0.0/12",
      "size" : 20
    },
    {
      "base" : "192.168.0.0/16",
      "size" : 24
    }
  ]

にして1ネットワークあたりのホスト数を少なくしてやればより多くのネットワークを作れるというわけです。

以下の記事に非常に詳しく説明されていて分かりやすいです。

#SynologyのContainer Managerでの設定方法

SynologyのContainer Managerを使っている人だけに関係がある話です。

通常であれば以上の設定を/etc/docker/daemon.jsonに加えればいいのですが、Synology NAS上のdockerでは

/var/packages/ContainerManager/etc/dockerd.json

に設定しなければなりません。

また、ここはContainer Managerの更新で上書きされる可能性があるため注意する必要があります。

Share this article:
一覧に戻る

© 2025 nazo6. All rights reserved.