Маршрутизация Docker в Ubuntu

В моей таблице маршрутизации на 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 использует те, которые они в настоящее время занимают.

Вопросы:

  1. Какая часть Docker создает эти br-* записи?
  2. Как Docker использует эти записи?
  3. Как настроить Docker назначить их другим диапазонам?
2
задан 14 May 2019 в 19:55

1 ответ

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 и использовать диапазоны.

0
ответ дан 14 May 2019 в 19:55

Другие вопросы по тегам:

Похожие вопросы: