Настройка 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, которая воссоздает столкновение.

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

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

$ docker -vDocker version 18.06.0-ce, build 0ffa825

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

# 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 (объединено)

Есть три места, где docker будет генерировать сетевые подсети.

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

Для моста по умолчанию (называемого "мост") вы можете указать 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 для пулов адресов по умолчанию. Вам нужно будет перезагрузить демон docker, чтобы это изменение вступило в силу (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

Я использую Рабочий стол Docker в одном Окна операционная система, и я попытался изменить IP-адрес моста по умолчанию.

Docker выдает ошибку и просит меня сбросить настройки каждый раз, когда я пытаюсь изменить только бип в настройках.

Это сработало: (нужно глубоко погрузиться и понять, как это работает)

{  "bip": "192.168.1.5/24",   "fixed-cidr": "192.168.1.5/25",   "default-address-pools":[      { "base":"192.168.2.5/24", "size":28 }  ]}

Настройте мостовая сеть по умолчанию:"... Чтобы настроить мостовую сеть по умолчанию, вы указываете параметры в файле daemon.json. Вот пример демона.json с несколькими указанными параметрами. Укажите только те настройки, которые вам нужно настроить. ..."

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

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