【问题标题】:How to change ip address range of docker swarm ingress network如何更改 docker swarm 入口网络的 IP 地址范围
【发布时间】:2017-03-22 14:07:12
【问题描述】:

我使用 docker swarm 1.13.1,当我初始化 docker swarm 或加入 docker swarm 时,有时它会在“172.19.0.0/16”子网中创建一个 docker_gwbridge 网络。

但是我的计算机子网在同一范围内,所以当它初始化这个网络时,我的计算机无法访问 docker swarm 主机。

所以我的问题是:如何更改现有 docker 网络的子网。

> docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
ac1100164960        bridge              bridge              local
3838ae360f35        docker_gwbridge     bridge              local
f9a77266aa15        host                host                local
rgqnm19zbasv        ingress             overlay             swarm
04c1c6b3ade7        none                null                local

检查网络:

> docker network inspect 3838ae360f35
[
    {
        "Name": "docker_gwbridge",
        "Id": "3838ae360f3585f2cda8a43a939643cdd74c0db9bfb7f4f18b3b80ae07b3b9db",
        "Created": "2017-03-22T13:26:50.352865644+01:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.19.0.0/16",
                    "Gateway": "172.19.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Containers": {
            "ingress-sbox": {
                "Name": "gateway_ingress-sbox",
                "EndpointID": "194d965dd2997bddb52eab636950e219043215a5a1a6a60d08f34e454a0eaa56",
                "MacAddress": "02:42:ac:13:00:02",
                "IPv4Address": "172.19.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.bridge.enable_icc": "false",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.name": "docker_gwbridge"
        },
        "Labels": {}
    }
]

【问题讨论】:

    标签: networking docker docker-swarm


    【解决方案1】:

    您可以在初始化 swarm 之前创建 docker_gwbridge,如 explained here

    例如:

    docker network rm docker_gwbridge
    docker network create --subnet=172.20.0.1/16 -o com.docker.network.bridge.enable_icc=false -o com.docker.network.bridge.name=docker_gwbridge docker_gwbridge
    

    【讨论】:

    • 它似乎工作正常,我使用:docker network create --subnet={Your prefered subnet } -o com.docker.network.bridge.enable_icc=false -o com.docker.network.bridge.name=docker_gwbridge docker_gwbridge
    【解决方案2】:

    解决此问题的一般方法,包括由 docker 或其他工具(如 docker-compose)为您创建的任何(非入口)网络,是在您的 @ 中设置 默认地址池 987654321@.

    在你的情况下,添加到/etc/docker/daemon.json(或~/.docker/daemon.json for Mac 的 Docker Desktop),例如:

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

    这样,您的 docker bridge 网络将获得10.10.0.0/24 的子网,而您的 docker swarm docker_gwbridge 将获得10.10.0.1/24 的子网。从docker-compose.yml 文件为您创建的任何其他网络都将获得后续的10.10.0.2/24 子网。以此类推。

    您没有提到这是一个问题,但不幸的是,这似乎不适用于ingress 网络。

    【讨论】:

    • 在较新的 Docker 版本中,该文件为 ~/.docker/daemon.json
    • @lukyer 本地用户的 docker daemon config 如何影响系统 docker config?
    • 不确定是否仍然存在任何系统 docker 配置 - 在我的情况下不是(macOS 上的桌面 docker)。当我将配置添加到本地用户的配置中时,一切都像魅力一样。
    • @lukyer 好吧,我认为那是适用于 Mac 的 Docker 桌面。在我看来,乍一看,它遵循在 VM 中运行 docker 的模型,并向用户提供 docker 界面,使其看起来好像在本地运行。
    猜你喜欢
    • 1970-01-01
    • 2019-07-15
    • 2021-01-03
    • 2020-05-23
    • 2019-04-18
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    相关资源
    最近更新 更多