T-CREATOR

docker-composeのコンテナへIPアドレスを設定して起動した際に発生するnetworks with user configured subnetsエラーの対応

docker-composeのコンテナへIPアドレスを設定して起動した際に発生するnetworks with user configured subnetsエラーの対応
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

docker-composeのコンテナへIPアドレスを設定して起動した際に発生するnetworks with user configured subnetsエラーの対応についてメモしました。

経緯

dockerでアプリを作成していてWebとDBのサーバーを切り離して利用できるようにしたかったため docker-composeを分けて作成しました。
その際に別々のdocker-composeでもコンテナ同士の通信ができるように同一のnetworkに含めるようにしています。
ただ別々でコンテナを立ち上げると立ち上げた際にIPが自動的に割り振られることで再起動すると通信ができなくなってしまうことがあったため IPを固定で起動できるように設定しました。

yaml// docker-compose.yaml
version: '3.5'
services:
  db:
    // 中略
    networks:
      sample_network:
        ipv4_address: 172.18.0.10

networks:
  sample_network:

sample_networkは下記コマンドで作成しました。

zsh$ docker network create -d bridge sample_network

環境

  • Docker 20.10.2
  • docker-compose 1.25.0

発生したエラー

docker-compose upコマンドで起動すると下記のエラーとなります。

zsh$ docker-compose up -d
Starting db ... error

ERROR: for db  user specified IP address is supported only when connecting to networks with user configured subnets

IPを指定する場合はユーザーが構成したsubnetを持つ場合にのみサポートされますという内容です。

ネットワークを確認

ネットワークを確認するとsubnetは172.18.0.0/16へ割り当てられています。
コンテナへ指定した172.18.0.10もともとネットワークを作成した際に割り当てられた172.18.0.0/16の範囲で指定していたのですがなぜかエラーになってしまいます。

zsh$ docker network inspect sample_network
[
    {
        "Name": "sample_network",
        "Id": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
        "Created": "2021-06-21T22:40:08.169449156+09:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.18.0.0/16"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]

subnetを指定してネットワークを作成し解決

subnetを指定して改めてネットワークを作成したら解決しました。

一度ネットワークを削除

docker network rmコマンドで削除します。

zsh$ docker network rm sample_network

subnetを指定してネットワークを再作成

subnetを指定してネットワークを再作成します。

zsh$ docker network create --subnet=172.18.0.0/16 sample_network

再度コンテナを起動

再度コンテナを起動したら無事起動しました。

zsh$ docker-compose up -d
Creating db       ... done

dbコンテナへのアクセス

dbコンテナへのアクセスについても同一のsample_networkへ所属している別のコンテナから 172.18.0.10でアクセスすると無事アクセスすることができました。

yaml// docker-compose.yaml
version: '3.5'
services:
  web:
    // 中略

networks:
  sample_network:

記事Article

もっと見る