错误现象
docker-compose up 报错
Error response from daemon: could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network
错误原因
Docker默认支持30个不同的自定义bridge网络,如果超过这个限制,就会提示上面的错误
使用命令 docker network ls 来查看创建的网络
其中 bridge、host、none,是docker默认网络 且不能删除
统计数量:
[root@localhost test]# docker network ls | wc -l
33
除去 标题栏 和 默认的 host、none 正好有30个bridge网络,印证了 “Docker默认支持30个不同的自定义bridge网络”
解决方法
方法一 删除没使用的网络
docker network prune
这个方法比较快速的 临时解决问题
方法二 指定网络配置
修改 docker-compose.yml 文件
networks:
default:
driver: bridge
ipam:
config:
- subnet: 172.20.1.0/24
或者 先创建网络 再指定使用这个网络配置
docker network create docker_compose_network --subnet 172.20.1.0/24
networks:
default:
external:
name: docker_compose_network
此方法 需要修改 docker-compose.yml 文件 如果docker-compose.yml文件较多 会比较麻烦
方法三 修改docker默认网络地址(推荐)
在 /etc/docker/daemon.json 追加
{
...
"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}
]
}
注意 配置中的 “…” 是配置原本的其他内容,如果没有 /etc/docker/daemon.json 文件则新建 加入 default-address-pools 的配置即可
这个配置将允许Docker分配
172.20.[0-255].0/24
172.21.[0-255].0/24
172.22.[0-255].0/24
172.23.[0-255].0/24
每个网络允许访问256个地址,总共1024个网络。
其中size表示每个容器分配的子网数目,例 {“base”:“172.20.0.0/16”,“size”:29}则表示可分配子网256*32.
加入后需要 删除现有网络占用
docker network prune
然后重启docker服务
service docker restart
此时再使用 docker-compose up 创建 若干容器后
使用 docker network ls 查看
再统计其数量
[root@localhost test]# docker network ls | wc -l
42
bridge 已经突破了30的默认限制,目前可以有1024个
此方法一劳永逸,不用修改 docker-compose.yml 文件 一次修改docker配置 永久生效