如何更改 docker 群入口网络的 IP 地址范围
How to change ip address range of docker swarm ingress network
我使用 docker swarm 1.13.1,当我初始化 docker swarm 或加入 docker swarm 时,有时它会在一个 docker_gwbridge 网络中创建一个“172.19.0.0/16”子网。
但是我的计算机子网在同一范围内,所以当它初始化这个网络时,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": {}
}
]
您可以在初始化 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 或 docker-compose 等其他工具为您创建的任何(非入口)网络,是设置 默认地址池在你的docker daemon config.
在您的情况下,添加到 /etc/docker/daemon.json
(或 ~/.docker/daemon.json
for Docker Desktop for Mac),例如:
{
"default-address-pools": [
{
"base": "10.10.0.0/16",
"size": 24
}
]
}
这样,您的 docker bridge
网络将获得 10.10.0.0/24
的子网,您的 docker 群 docker_gwbridge
将获得 docker_gwbridge
的子网=16=]。从 docker-compose.yml
文件中为您创建的任何其他网络都将获得后续的 10.10.0.2/24
子网。等等。
你没有提到这个问题,但不幸的是,这似乎不适用于 ingress
网络。
我使用 docker swarm 1.13.1,当我初始化 docker swarm 或加入 docker swarm 时,有时它会在一个 docker_gwbridge 网络中创建一个“172.19.0.0/16”子网。
但是我的计算机子网在同一范围内,所以当它初始化这个网络时,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": {}
}
]
您可以在初始化 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 或 docker-compose 等其他工具为您创建的任何(非入口)网络,是设置 默认地址池在你的docker daemon config.
在您的情况下,添加到 /etc/docker/daemon.json
(或 ~/.docker/daemon.json
for Docker Desktop for Mac),例如:
{
"default-address-pools": [
{
"base": "10.10.0.0/16",
"size": 24
}
]
}
这样,您的 docker bridge
网络将获得 10.10.0.0/24
的子网,您的 docker 群 docker_gwbridge
将获得 docker_gwbridge
的子网=16=]。从 docker-compose.yml
文件中为您创建的任何其他网络都将获得后续的 10.10.0.2/24
子网。等等。
你没有提到这个问题,但不幸的是,这似乎不适用于 ingress
网络。