PHP CLI - ERROR: 无法在默认的IPv4地址池中找到可用且非重叠的地址,以分配给网络。
PHP CLI - ERROR: 无法在默认的IPv4地址池中找到可用且非重叠的地址,以分配给网络。
我正在尝试运行docker-compose up -d
命令,使用以下的docker-compose.yml
文件:
version: '2'
services:
php7-cli:
build: php7-cli
image: php7-cli
tty: true
volumes:
- ../:/var/www/app
networks:
- my-network
networks:
my-network:
driver: bridge
docker-compose build
成功构建,但是当我尝试运行docker-compose up
时,出现以下错误信息:
ERROR: could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network
当我尝试运行docker network ls
时,得到的结果是:
NETWORK ID NAME DRIVER SCOPE 7c8a6c131c1b bridge bridge local 9f16d3a33b4e host host local 24c54a4323ed none null local
我尝试通过docker network prune
来删除孤立的网络,但是没有一个网络被移除。
然后,我尝试手动删除bridge
网络:docker network rm 7c8a6c131c1b
,但是我收到了以下错误信息:
Error response from daemon: bridge is a pre-defined network and cannot be removed
这是我的docker version
:
docker version Client: Version: 18.03.1-ce API version: 1.37 Go version: go1.9.5 Git commit: 9ee9f40 Built: Thu Apr 26 07:17:20 2018 OS/Arch: linux/amd64 Experimental: false Orchestrator: swarm Server: Engine: Version: 18.03.1-ce API version: 1.37 (minimum version 1.12) Go version: go1.9.5 Git commit: 9ee9f40 Built: Thu Apr 26 07:15:30 2018 OS/Arch: linux/amd64 Experimental: false
在PHP CLI中出现错误:“ERROR: could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network”。这个问题的出现原因是网络接口的命名不匹配,可以通过将网络接口的名称从ens33改为eth0来解决。
根据https://www.itzgeek.com/how-tos/mini-howtos/change-default-network-name-ens33-to-old-eth0-on-ubuntu-16-04.html上的指南进行操作可以解决该问题。
问题原因:在 docker 网络中存在没有使用的 bridge 类型网络,导致无法分配可用的、非重叠的 IPv4 地址池给网络。
解决方法:删除不再使用的 bridge 类型网络。
具体步骤如下:
1. 列出 docker 网络,查找与不再使用的项目相关的 bridge 类型网络。
- 这些网络是在多个目录中运行 docker-compose 应用时创建的。
$ docker network ls NETWORK ID NAME DRIVER SCOPE 070b2051c2d6 altacv_default bridge local 90269e56ef9c arquitecture_default bridge local f04c85b27605 awesome-cv-docker_default bridge local cfdc24506a32 aws-s3-bucket-state_default bridge local 51b7b53697cc bridge bridge local e4f4800f11bf certs-resource_default bridge local 7d760fc8a8c3 cloner_default bridge local 4a161fb223cc coverletter_default bridge local d16029047f65 distance-matrix-service_default bridge local 9e944ddd5da0 docker-compose-deployer_default bridge local fb25db546e14 docker-compose-deployment_default bridge local 150cd02ad55c docker-neo4j_default bridge local c76d6167e7b1 docker-pycobertura_default bridge local
2. 删除不再使用的网络。逐个删除不需要的网络的网络ID。
$ docker network rm 655b6657b925 644fecac3549 6fac6fd59fe8 3d03a7df183d 40d112093fc7 32de1ea6549d 5cdd12695a4d 1e30562c7f63 58b1f6343780 e7bbf7af6dbb 4a161fb223cc 070b2051c2d6 90269e56ef9c 655b6657b925 Error response from daemon: error while removing network: network tools_supercash-data id 644fecac3549735341a482ddf330918a2050bc6ee2bcd4123d208051c836f9eb has active endpoints 6fac6fd59fe8 3d03a7df183d 40d112093fc7 ... ... ...
3. 完成,现在可以正常使用 docker-compose。
docker-compose up ... ...
这样,通过删除不再使用的网络,就可以解决出现"ERROR: could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network"的问题。