fixed-cidr
とdefault-address-pools
の意味を把握しておらず、コンテナ作成時に振られるIPアドレスが狙い通りにならなかったため、これらについてまとめました。
--ip
オプションやDocker Composeのnetworks
で明示的にIPアドレスを指定するのではなく、コンテナ作成時にデフォルトで割り当てられるIPアドレスの範囲をdaemon.json
で設定する方法です。
fixed-cidr
とdefault-address-pools
の意味
fixed-cidr
fixed-cidr
は、デフォルトブリッジネットワーク(docker0
)のサブネット内でコンテナに割り当てるIPアドレスの範囲を制限する設定です。
例えば、bip
で172.20.0.0/24
を指定した際に、fixed-cidr
で172.20.0.128/25
のような範囲を指定することで、コンテナがその範囲内からIPを取得するように制御します。bip
で指定したサブネット範囲全体を使っても構わない場合、fixed-cidr
を指定する必要はありません。
ちなみにbip
は、docker0
のIPアドレスとネットワークアドレス範囲を指定する設定値です。
default-address-pools
default-address-pools
は、新規作成したDockerネットワーク内でコンテナに割り当てられるIPアドレスの範囲を指定するための設定です。
docker
コマンドでコンテナを作成する場合は、明示的にネットワークを指定しなければdocker0
ネットワークに属するためdefault-address-pools
の設定値は関係ありませんが、Docker Composeの場合は、network_mode: bridge
と設定しなければ自動的に新たなネットワークが作成されるため、default-address-pools
で設定したネットワークアドレス範囲からIPアドレスが割り当てられます。
daemon.json
の例
daemon.json
の例を書いておきます。
以下の設定では、docker0
ブリッジのIPアドレスを192.168.0.1/24
に設定し、docker0
に接続するコンテナのIPアドレスを192.168.0.128/25
の範囲内から割り当てます。その他のネットワークには、172.16.0.0/12
の範囲をベースとして、172.16.0.0/20
、172.16.16.0/20
、172.16.32.0/20
、...、172.31.240.0/20
といったサブネットが払い出されることになり、コンテナにはこれらのサブネットからIPアドレスが割り当てられます。
{
"bip": "192.168.0.1/24",
"fixed-cidr": "192.168.0.128/25",
"default-address-pools": [
{
"base": "172.16.0.0/12",
"size": 20
}
]
}
まとめ
デフォルトブリッジネットワークを適用する場合はfixed-cidr
、Docker Composeで特に設定せず起動するなどして別途作成されたネットワークを適用する場合はdefault-address-pools
を使うことでコンテナに割り当てるIPアドレスをコントロールすることができます。