如何更改Docker Swarm Ingress网络的IP地址范围

ycggw6v2  于 2023-08-03  发布在  Docker
关注(0)|答案(3)|浏览(189)

我使用的是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": {}
    }
]

gz5pxeao

gz5pxeao1#

您可以在初始化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

字符串

axr492tv

axr492tv2#

解决这个问题的一般方法,包括由docker或其他工具(如docker-compose)为您创建的任何(非入口)网络,是在docker daemon config中设置默认地址池
在您的情况下,添加到/etc/docker/daemon.json(或~/.docker/daemon.json用于Docker Desktop for Mac),例如:

{
  "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网络。

ttp71kqs

ttp71kqs3#

我们已经解决了改变docker_gwbridge的子网,而不需要删除所有正在运行的服务和停止docker swarm,如下所示:
1.断开所有端点与网络的连接。

docker network disconnect -f docker_gwbridge container_name

字符串
1.删除现有接口:

ip link set docker_gwbridge down
ip link del dev docker_gwbridge


1.删除Docker网络

docker network rm docker_gwbridge


1.重建桥梁

docker network create \
--subnet 10.11.0.0/16 \
--opt com.docker.network.bridge.name=docker_gwbridge \
--opt com.docker.network.bridge.enable_icc=false \
--opt com.docker.network.bridge.enable_ip_masquerade=true \
docker_gwbridge


1.重新启动主机

相关问题