Начну с того, что я новичок в 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