web-dev-qa-db-ja.com

Docker Composeがエラー「ネットワークにIPv4が重複しています」を返す

まず、私はDockerにまったく慣れていないので、まだDockerエコシステムに慣れていないと言います。

私が実行しようとしているのは、プロジェクト全体のローカル開発環境で使用する_docker-composer.yml_を作成することです。

私はすでに wp-local-docker を自分のWordPress=プロジェクトに使用していますが、異なる要件が付属する古いプロジェクトもあるので、自分で作成しました_docker-compose.yml_。自分の_docker-compose.yml_のコードは次のとおりです。

_version: "3.4"
services:
   database:
      image: mysql:latest
      ports:
         - "3306:3306"
      environment:
         MYSQL_ROOT_PASSWORD: password
         MYSQL_DATABASE: appdb
         MYSQL_USER: appuser
         MYSQL_PASSWORD: password
      volumes:
         - $PWD/data/db:/var/lib/mysql
      networks:
          app_net:
              ipv4_address: 192.168.50.10
   phpmyadmin:
      image: phpmyadmin/phpmyadmin:latest
      links:
         - database:mysql
      ports:
         - "8181:80"
      environment:
         MYSQL_ROOT_PASSWORD: password
         MYSQL_USER: appuser
         MYSQL_PASSWORD: password
         PMA_Host: mysql
         PMA_PORT: 3306
         PMA_USER: appuser
         PMA_PASSWORD: password
      networks:
         app_net:
            ipv4_address: 192.168.50.11
   web:
      build: $PWD/ApachePHP
      depends_on:
         - database
      links:
         - database:mysql
         - mailcatcher
      ports:
         - "8080:80"
         - "443:443"
      volumes:
         - $PWD/www:/var/www/html
         - $PWD/ApachePHP/000-default.conf:/etc/Apache2/sites-available/000-default.conf
      environment:
         - MYSQL_ROOT_PASSWORD=appuser
         - MYSQL_ROOT_USER=password
      networks:
         app_net:
            ipv4_address: 192.168.50.12
   mailcatcher:
      image: schickling/mailcatcher
      ports:
         - "1025:1025"
         - "1080:1080"
      environment:
         MAILCATCHER_PORT: 1025
      networks:
         app_net:
            ipv4_address: 192.168.50.13
networks:
   app_net:
      driver: bridge
      ipam:
         driver: default
         config:
            - subnet: 192.168.50.0/24
_

ネットワークをインストールした理由は、データベースサーバーにアクセスしようとすると、ネットワークに関連するエラーが発生するためです。

長い調査の結果、volumesサービスでdatabaseを使用すると、エラーが返されることがわかりました。試してみると、phpmyadminにアクセスしようとすると同じエラーが発生することがわかります。

繰り返しますが、長い調査の結果、ネットワークを設定すればvolumesdatabaseを使用できることがわかりました。

今、私が最初の走行をしたとき、これは魅力のように働きました。テストフォルダーでは、ホストフォルダーのパス_/data/db_の下にデータベースファイルがありました

次に、_docker-compose stop_コマンドを使用してdocker composeを停止し、次に_docker-compose.yml_をコピーした別のフォルダーに移動して、_docker-compose up_を実行しました。

残念ながら今回は次のエラーが発生しました:

Creating network "corfurealestatedch_app_net" with driver "bridge" ERROR: cannot create network 791b388ece09120f1138d48427969c23ded22c6fc73699b7f8c2c8e195b59586 (br-791b388ece09): conflicts with network a675c47764eba17e3338860f56512067df580cef31415906ec57fa3b64f3cdab (br-a675c47764eb): networks have overlapping IPv4

したがって、問題は、他のコンテナIPと競合することなく、ローカルプロジェクト全体で使用できるように_docker-compose.yml_を設定できるかどうかです。

もちろん、プロジェクトごとに異なるIP範囲/サブネットを設定することはできますが、これはある程度の混乱を招く可能性があると考えています。

どのようにそれを修正できるかについてのアイデアはありますか?

3
Merianos Nikos

ここで示したエラーから、Dockerがbr-791b388ece09という名前のブリッジドライバーを使用してネットワークを作成しようとしているように見えます。

したがって、最初に使用可能なネットワークを確認します。

$ docker network ls

IDがa675c47764ebのブリッジが表示された場合は、このサブネットを削除してから、同じサブネット上に新しいブリッジを作成してください。

$ docker network rm a675c47764eb

次に、Dockerセットアップを swarm に対して再実行します。ネットワークが正しく作成されます。

または、別のIPサブネットを使用できます。 192.168.50.xを192.168.51.xのようなものに置き換えます。これで問題も解決するはずです。

6
Lena Weber

すべてのネットワークを一覧表示

$ip a

Br-a675c47764ebのブリッジが表示され、そのステータスがダウンしている場合は、削除します

$brctl delbr br-a675c47764eb

次に、Dockerを再起動します

$service docker restart

Docker-composeを再度実行する

4
michael