Назад | Перейти на главную страницу

Настройка Docker, чтобы не использовать диапазон 172.17.0.0

Из-за проблем с подключенными порталами и диапазоном IP-адресов Docker по умолчанию я пытаюсь заставить Docker использовать диапазон 198.18.0.0 вместо 172.17.0.0, который конфликтует с подключенными порталами, используемыми в поездах, где я живу.

Следующий документы, Я создал /etc/docker/daemon.json, и поместите в него следующее:

{
    "bip":"198.18.0.0/16"
}

Это сработало для docker0, но, похоже, не повлияло ни на одну из других сетей, и при использовании docker compose первая созданная сеть - 172.17.0.0, которая воссоздает конфликт.

Что я могу сделать, чтобы изменить подсеть по умолчанию для все сети докеров (желательно без указания настраиваемого диапазона IP-адресов в каждом файле композиции)?

Можно переопределить диапазон по умолчанию.

$ docker -v
Docker version 18.06.0-ce, build 0ffa825

Отредактируйте или создайте файл конфигурации для демона докеров:

# nano /etc/docker/daemon.json

Добавьте строки:

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

Перезагрузите dockerd:

# service docker restart

Проверяем результат:

$ docker network create foo
$ docker network inspect foo | grep Subnet
                    "Subnet": "10.10.1.0/24"

Он работает и для docker-compose. Больше информации здесь https://github.com/moby/moby/pull/29376 (объединено)

Докер будет создавать сетевые подсети в трех местах.

  • Мост по умолчанию
  • Пользовательские мостовые сети
  • Создаваемые в режиме роя оверлейные сети

Для моста по умолчанию (называемого «мост») вы можете указать BIP (я считаю, что это IP-адрес моста; убедитесь, что это IP-адрес хоста, а не сетевой IP) в daemon.json файл. А для создаваемых пользователем мостовых сетей вы можете определить пул подсетей для выбора (при условии, что пользователь не указывает подсеть вручную). Для этих двоих ваш /etc/docker/daemon.json будет выглядеть так:

{
  "bip": "10.200.0.1/24",
  "default-address-pools":[
    {"base":"10.201.0.0/16","size":24},
    {"base":"10.202.0.0/16","size":24}
  ]
}

Каждый параметр пула адресов выше определяет диапазон CIDR и размер подсетей, которые будут выделены из этого диапазона. Таким образом, приведенное выше определяет два диапазона класса B, которые выделяются как сети класса C (/ 24). Для пулов адресов по умолчанию вам потребуется не менее 18,06. Вам нужно будет перезагрузить демон докера, чтобы это изменение вступило в силу (systemctl reload docker). И это изменение изменит только недавно созданные пользовательские сети, поэтому вам нужно будет останавливать контейнеры и удалять существующие сети в неправильном диапазоне.


В 18.09 Docker добавил возможность указывать диапазон адресов для оверлейных сетей, генерируемых в режиме роя. Это можно сделать только во время создания роя прямо сейчас, надеюсь, это будет обновлено в будущем, чтобы позволить docker swarm update чтобы настроить эти пулы:

$ docker swarm init \
  --default-addr-pool 10.202.0.0/16 \
  --default-addr-pool 10.203.0.0/16 \
  --default-addr-pool-mask-length 24

Настроить сеть моста по умолчанию: «… Чтобы настроить мостовую сеть по умолчанию, вы указываете параметры в daemon.json. Вот пример daemon.json с несколькими указанными параметрами. Укажите только те параметры, которые необходимо настроить.…»

С составлением: Укажите собственные сети: "… Вместо того, чтобы просто использовать сеть приложений по умолчанию, вы можете указать свои собственные сети с помощью сетевого ключа верхнего уровня. Это позволяет вам создавать более сложные топологии и указывать настраиваемые сетевые драйверы и параметры. Вы также можете использовать его для подключения служб к сети, созданные извне, которые не управляются Compose.… "

Это может быть немного жестоко, но я просто sudo ifconfig docker0 down чтобы закрыть интерфейс, который конфликтует с Wi-Fi, который я пытаюсь использовать.