美文网首页Docker问题答疑
could not find an available, non

could not find an available, non

作者: 爱恨_交加 | 来源:发表于2022-07-14 16:55 被阅读0次

    背景

    在一台服务器上,存在多个应用并且都是通过docker-compose启动。为了避免网段(IP)冲突,事先在/etc/docker/daemon.json中添加了参数default-address-pools,如下:

    {
      "default-address-pools": [
        {
          "base": "172.100.0.0/16",
          "size": 24
        },
        {
          "base": "172.101.0.0/16",
          "size": 24
        },
        {
          "base": "172.102.0.0/16",
          "size": 24
        }
      ]
    }
    

    在该服务器上再部署几个应用,并且都是通过docker-compose启动,此时应用启动失败,提示如下错误:

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

    猜想:假设部署应用后先不启动,直接重启服务器,让docker守护进程拉起应用,此时部分应用应该会启动失败。

    原因

    假设服务器上docker网络有如下:

    [root@localhost docker]# docker network ls
    NETWORK ID     NAME                 DRIVER    SCOPE
    b820882cd705   bin_a_default        bridge    local
    53feb3497270   bin_b_default        bridge    local
    b820882cd701   bin_d_default        bridge    local
    53feb3497272   bin_e_default        bridge    local
    b820882cd703   bin_f_default        bridge    local
    2fc12b3e7fd5   bridge               bridge    local
    4de99102b93b   host                 host      local
    f408314129a1   none                 null      local
    

    默认情况下,docker的bridge网络需要一个网段,每个docker-compose启动服务都需要一个网络。此时default-address-pools中只有3个网段,但是现在需要6个网段(bridge、bin_a_default、bin_b_default、bin_c_default、bin_d_default、bin_e_default、bin_f_default),所以就出现上述的错误提示。

    提示:通过如上的分析,每当我们在服务器上用docker-compose新启动一个服务(原先的创建network还存在),就需要解决这个网段不够的问题

    解决办法

    本质:为服务器上的应用启动提供足够IP地址(IPv4 address pool)。

    1. 把多余的网络移除。
    docker network rm <network_name>
    
    1. /etc/docker/daemon.json中增加default-address-pools的值,然后重启docker。
    2. 在应用服务启动前,为其创建没有网段冲突的网络,然后在其的docker-compose.yml中配置刚刚创建的网络。如:
    docker network create --subnet "172.100.0.0/16" mynet
    
    1. docker-compose.yml中指定网络并使用

    相关文章

      网友评论

        本文标题:could not find an available, non

        本文链接:https://www.haomeiwen.com/subject/alcfirtx.html