Docker Compose retorna erro “redes possuem sobreposição de IPv4”

2

começando dizendo que sou totalmente novo no Docker e ainda não estou familiarizado com o ecossistema do Docker.

O que eu tento executar é criar um docker-composer.yml para ser usado no meu ambiente de desenvolvimento local em meus projetos.

Eu já uso o wp-local-docker para meus projetos WordPress, mas também tenho projetos antigos que vêm com requisitos diferentes e, por esse motivo, eu fiz o meu próprio docker-compose.yml . O código do meu próprio docker-compose.yml é o seguinte:

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

A razão pela qual eu instalei a rede é que quando tento acessar o servidor de banco de dados, recebo um erro relacionado à rede.

Após um longo período de pesquisa, descobri que quando uso o serviço volumes in database , recebo o erro. Se você tentar, verá que quando tentar acessar o phpmyadmin , receberá o mesmo erro.

Mais uma vez, após um longo período de pesquisa, descobri que posso usar o volumes para o database se eu configurar uma rede.

Agora, quando fiz a primeira corrida, funcionou como um encanto. Na pasta de teste, eu tinha os arquivos de banco de dados em minha pasta de host sob o caminho /data/db

Em seguida, parei a janela de encaixe para redigir usando o comando docker-compose stop e depois mudei para outra pasta, na qual copiei o docker-compose.yml e depois executei o docker-compose up .

Infelizmente, desta vez, recebi o seguinte erro:

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

Portanto, a questão é se posso configurar o docker-compose.yml de tal forma que ele possa ser usado em todos os meus projetos locais sem entrar em conflito com os outros IPs de contêineres.

Eu sei, é claro que posso ter um intervalo / sub-rede de IPs diferentes para cada projeto, mas estou pensando que isso pode se tornar uma bagunça em um período de tempo.

Alguma ideia de como posso corrigir isso?

    
por Merianos Nikos 19.12.2017 / 19:33

2 respostas

5

Do erro que você mostrou aqui, parece-me que o docker está tentando criar uma rede com o driver de ponte chamado br-791b388ece09, que então reclama tem uma sub-rede IP sobreposta com a ponte br-a675c47764eb.

Então, primeiro verifique suas redes disponíveis usando:

$ docker network ls

Se você vir a ponte com o ID a675c47764eb, certifique-se de que isso seja excluído antes de criar um novo na mesma sub-rede, para esse uso:

$ docker network rm a675c47764eb

Em seguida, execute novamente a configuração da janela de encaixe para o enxame , ele deve criar a rede corretamente.

Como alternativa, você pode usar uma sub-rede IP diferente. Substitua 192.168.50.x por algo como 192.168.51.x. Isso também deve resolver seu problema.

    
por 07.01.2018 / 10:41
4

Listar toda a rede

$ip a

Se você vir a ponte com br-a675c47764eb e seu status estiver inativo, exclua-o

$brctl delbr br-a675c47764eb

Em seguida, reinicie o docker

$service docker restart

Executar o docker-compose novamente

    
por 05.05.2018 / 05:52