Docker Compose 返回错误“网络有重叠的 IPv4”

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

我安装网络的原因是,当我尝试访问数据库服务器时,出现与网络相关的错误。

经过长时间的研究,我发现当我volumesdatabase服务中使用时会返回错误。如果你尝试一下,你会发现当你尝试访问时phpmyadmin你会得到同样的错误。

再次,经过长时间的研究,我发现如果我建立了一个网络,我可以volumes使用database

现在,当我第一次运行时,它运行得很好。在测试文件夹中,我将数据库文件放在路径下的主机文件夹中/data/db

然后我使用命令停止了 docker compose 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 范围/子网,但我认为这在一段时间内可能会变得一团糟。

有什么想法可以修复这个问题吗?

答案1

从您在此处显示的错误来看,在我看来,docker 正在尝试创建一个带有名为 br-791b388ece09 的桥接驱动程序的网络,然后该网络抱怨与桥接 br-a675c47764eb 有一个重叠的 IP 子网。

因此,首先使用以下命令检查可用网络:

$ docker network ls

如果您看到 ID 为 a675c47764eb 的网桥,请确保先删除该网桥,然后在同一子网上创建新的网桥,其用途如下:

$ docker network rm a675c47764eb

然后重新运行docker设置一群,它应该可以正确创建网络。

或者,您可以使用不同的 IP 子网。将 192.168.50.x 替换为 192.168.51.x 之类的地址。这应该也能解决您的问题。

答案2

列出所有网络

$ip a

如果你看到带有 br-a675c47764eb 的桥,并且它的状态为关闭,请将其删除

$brctl delbr br-a675c47764eb

然后重启docker

$service docker restart

再次运行 docker-compose

答案3

如果你在 Linux 系统上运行它,只需确认你iptables已经打开了 docker-compose 所需的端口。像这样:

iptables -I INPUT -p tcp --dport 80 -s 0.0.0.0 -j ACCEPT

# or

vim /etc/sysconfig/iptables

# then

systemctl restart iptables

network然后删除同一子网上的冲突:

docker network ls

docker network rm <id>

如果以上方法不起作用,只需重新启动docker,就应该没问题。

相关内容