目录
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容器,是使用 bridgeDocker安装时创建的桥接网络,每次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文件较多 会比较麻烦
创建网络文章来源:https://www.toymoban.com/news/detail-783257.html
docker network create docker_compose_default_network --subnet 172.20.1.0/24
docker-compose.yaml指定网络文章来源地址https://www.toymoban.com/news/detail-783257.html
networks: default: external: name: docker_compose_default_network
2.投票
到了这里,关于【Docker系列】docke报错 non-overlapping IPv4 address pool among the defaults to assign to the network 解决方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!