Назад | Перейти на главную страницу

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 вы получите ту же ошибку.

Опять же, после долгих исследований я обнаружил, что могу использовать volumes для database если я настраиваю сеть.

Теперь, когда я сделал первый запуск, это сработало как шарм. В тестовой папке у меня были файлы базы данных в моей папке хоста по пути /data/db

Затем я остановил создание докеров с помощью команды docker-compose stop а затем я перешел в другую папку, в которую я скопировал 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

Итак, вопрос в том, могу ли я настроить docker-compose.yml таким образом, чтобы его можно было использовать в моих локальных проектах, не конфликтуя с IP-адресами других контейнеров.

Я знаю, конечно, у меня может быть разный диапазон IP-адресов / подсеть для каждого проекта, но я думаю, что это может стать беспорядком в определенный период времени.

Есть идеи, как я могу это исправить?

Судя по показанной здесь ошибке, мне кажется, что докер пытается создать сеть с драйвером моста с именем br-791b388ece09, который затем жалуется, что IP-подсеть перекрывается с мостом br-a675c47764eb.

Поэтому сначала проверьте доступные сети, используя:

$ docker network ls

Если вы видите мост с идентификатором a675c47764eb, убедитесь, что он удален, прежде чем создавать новый в той же подсети, для этого использования:

$ docker network rm a675c47764eb

Затем перезапустите настройку докера для роиться, он должен правильно создать сеть.

В качестве альтернативы вы можете использовать другую IP-подсеть. Замените 192.168.50.x чем-то вроде 192.168.51.x. Это также должно решить вашу проблему.

Список всех сетей

$ip a

Если вы видите мост с br-a675c47764eb и его статус не работает, удалите его.

$brctl delbr br-a675c47764eb

Затем перезапустите докер

$service docker restart

Снова запустите docker-compose