В моей таблице маршрутизации на Ubuntu 18.04 есть следующие записи:
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-9f3f970041e3
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-66d1d4ca46a2
172.19.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
Запись docker0 мне удалось переместить в другой диапазон IP-адресов, создав файл /etc/docker/daemon.json
и добавив в него {"bip": "172.19.0.1/16"}
.
Я не уверен, откуда поступают записи br-*
, но я знаю, что, если я удаляю их, Docker перестает работать, поэтому они используются Docker.
Мне нужно, чтобы Docker назначил эти br-*
адреса в 172.20.0.0
и 172.21.0.0
, потому что сеть corp использует те, которые они в настоящее время занимают.
Вопросы:
br-*
записи? Docker использует мосты для разделения сети на несколько отдельных частей. br-*
обычно создаются с файлами docker-compose
, когда вы запускаете ваши контейнеры с файлом композита (docker-compose.yml
). поэтому docker создает новый сетевой мост для изоляции вашего контейнера. вы можете видеть свои сети с помощью этого:
docker network ls
output:
NETWORK ID NAME DRIVER SCOPE
78d5fd93be37 bridge bridge local
b20b47d754cd example1_default bridge local
f26798e4e71c exporter-net bridge local
ed99a6f6dfc1 host host local
12910824ac92 none null local
br-*
мосты приходят из br-<NETWORK ID>
ваших сетей.
вы можете увидеть его подсеть и контейнеры, использующие эту сеть, с помощью команды:
docker inspect <NETWORK NAME like example1_default>
вывод:
[
{
"Name": "example1_default",
"Id": "b20b47d754cdaba5dfe89f181e5d5a93eee4c50d3f34d8d93f16eed2e80e72b0",
"Created": "2019-05-12T18:16:03.618737845+04:30",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.20.0.0/16", ##### subnet
"Gateway": "172.20.0.1"
}
]
},
"Internal": false,
"Attachable": true,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": { ##### containers using this network
"5a3fba164f7c15318eaab64b65a1c7996a1da15d84629e818e8b61195fe14345": {
"Name": "example_container",
"EndpointID": "cbced3c6c8ae79ae266261de6f62f469aefdc6a7a0f5f79fd0f04301f0030e34",
"MacAddress": "03:11:fe:00:00:02",
"IPv4Address": "172.20.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {
"com.docker.compose.network": "default",
"com.docker.compose.project": "example1"
}
}
]
, чтобы изменить диапазон подсети, Вы должны создать новую сеть с пользовательской подсетью:
docker network create --subnet 172.123.123.0/24 new_network
и повторно подключить свои контейнеры к новой сети. Вы должны повторить это для всех контейнеров, использующих old_network.
docker network disconnect old_network container_name
docker network connect new_network container_name
Теперь вы можете удалить old_network и использовать диапазоны.