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

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

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

経緯

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

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

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

terminal
$ docker network create -d bridge sample_network

環境

  • Docker 20.10.2
  • docker-compose 1.25.0

発生したエラー

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

terminal
$ 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の範囲で指定していたのですがなぜかエラーになってしまいます。

terminal
$ 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コマンドで削除します。

terminal
$ docker network rm sample_network

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

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

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

再度コンテナを起動

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

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

dbコンテナへのアクセス

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

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

終わりに

最後までご覧いただきありがとうございます。
この記事ではdocker-composeのコンテナへIPアドレスを設定して起動した際に発生するnetworks with user configured subnetsエラーの対応について紹介させていただきました。

これからも皆様の開発に役立つ情報を提供していきたいと考えています。
今後ともよろしくお願いいたします。