【Docker系列】docke报错 non-overlapping IPv4 address pool among the defaults to assign to the network 解决方法

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

目录

1. 问题

1.1 问题描述

1.2 原因

1.3 排查步骤 

1.3.1 查看docker 网络

1.3.2 查看网络数量 

1.4 解决方案

1.4.1 删除没使用的网络

1.4.2 修改docker默认网络地址

1.4.3 yml指定网络

2.投票


 

好运气不会凭空而来要么藏在努力里要么藏在坚持里。

文章标记颜色说明

  • 黄色重要标题
  • 红色用来标记结论
  • 绿色用来标记一级论点
  • 蓝色用来标记二级论点

1. 问题

1.1 问题描述

docker-compose up -d 命令部署报错如下

Creating network "test_default" with the default driver

could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network

1.2 原因

Docker默认支持30个不同的自定义bridge网络如果超过这个限制就会提示上面的错误

1.3 排查步骤 

1.3.1 查看docker 网络

使用命令

docker network ls

查看创建的网络可以查看服务器上目前已存在的网络

说明

bridge、host、none是docker默认网络不能删除

bridge桥接网络
默认情况下启动的Docker容器是使用 bridge

Docker安装时创建的桥接网络每次Docker容器重启时会按照顺序获取对应的IP地址就导致重启后Docker的IP地址就变了

none无指定网络
使用 --network=none docker 容器就不会分配局域网的IP

这种适合不需要分配IP的情况。

host 主机网络
使用 --network=host此时Docker 容器的网络会附属在主机上两者是互通的。
例如在容器中运行一个Web服务监听8080端口则主机的8080端口就会自动映射到容器中。

1.3.2 查看网络数量 

使用命令

docker network ls | wc -l

可以查看到现有数量33

除去 标题栏 、默认的 host、null 正好有30个bridge网络

也说明了 “Docker默认支持30个不同的自定义bridge网络”是这个原因导致

1.4 解决方案

1.4.1 删除没使用的网络

这种方法可以快速解决问题且不用重启docker,

但是对于服务器数量多复杂的情况也存在一定的风险。

不要盲目删除需要确定能删除才去执行。

使用命令

docker network prune

这种方案可以快速解决问题但是也有一定的不足之处。

输入y即可删除

 删除之后查询数量可以看到数量减少了

这时候去部署项目即可成功 

1.4.2 修改docker默认网络地址

这种方法可以一劳永逸但是如果对docker重启要求比较严格还是要慎重选择。

可以再docker安装成功之后就修改其网络地址即可避免后期该问题的发生。

通常情况下docker服务安装后docker默认使用的网络IP段是172.17.0.1/24

这样容易对实际环境造成冲突。为了解决这个问题可参考以下方法

1.使用如下命令停止docker

systemctl stop docker

2.cat /etc/docker/daemon.json

cat /etc/docker/daemon.json

在文件中添加 default-address-pools如下

    "default-address-pools":[
        {"base":"172.20.0.0/16","size":24},
        {"base":"172.21.0.0/16","size":24},
        {"base":"172.22.0.0/16","size":24},
        {"base":"172.23.0.0/16","size":24}
    ]

这个配置将允许Docker分配

172.20.[0-255].0/24

每个网络允许访问256个地址256*4=1024 总共1024个网络。

此外加入后需要 删除现有网络占用执行命令如下

docker network prune  

重启docker 后续该问题应该就不会发生了。

service docker restart

1.4.3 yml指定网络

此方法 需要修改 docker-compose.yml 文件

如果项目docker-compose.yml文件较多 会比较麻烦

创建网络

docker network create docker_compose_default_network --subnet 172.20.1.0/24

docker-compose.yaml指定网络

networks:
  default:
    external: 
      name: docker_compose_default_network 

2.投票

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Docker

“【Docker系列】docke报错 non-overlapping IPv4 address pool among the defaults to assign to the network 解决方法” 的相关文章