Docker не работает с VPN из-за проблем с сетью - PullRequest
0 голосов
/ 05 августа 2020

По какой-то причине мой VPN (NordVPN) мешает Docker:

make start
docker-compose -f docker-compose/docker-compose.base.yml -f docker-compose/docker-compose.dev.yml up -d
doCreating network "docker-compose_default" with the default driver
ERROR: could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network
cmake: *** [Makefile:59: up_dev] Error 1

Проблема, похоже, связана с сетью. Однако я не знаю, как это устранить или исправить. После отключения моего VPN и запуска sudo systemctl restart docker, Docker работает нормально.

Environment

  • Ubuntu 20.04 LTS
  • Docker версия 19.03.8, сборка afacb8b7f0
  • Версия NordVPN 3.7.4

1 Ответ

0 голосов
/ 06 августа 2020

TL; DR

Проблема в том, что docker / docker-compose не может найти подходящий диапазон адресов для назначения su bnet новой внутренней сети, поскольку VPN добавляет маршруты для всех IP-адресов.

Решения:

  1. вручную определить сеть и диапазон ее адресов в docker-compose.yml или использовать существующий => требует изменений во всех ваших docker-compose.yml файлах, которые также могут стать труднопереносимыми из-за жестко заданных адресов.
  2. start docker / все ваши сервисы до VPN => вероятно, не во всех случаях
  3. перенастройте конфигурацию маршрутизации вашей VPN, чтобы исключить диапазоны, которые будут использоваться docker =>, это усложнит вашу конфигурацию VPN и может привести к утечке трафика c, предназначенного для VPN, если сделано неправильно

Пояснение

По умолчанию docker-compose устанавливает выделенный docker network для каждого проекта , т.е. виртуальное мостовое устройство на хосте docker.

Чтобы назначить диапазон su bnet и адрес шлюза для сеть docker пытается выбрать диапазон из пула возможных диапазонов. Он проверяет, не перекрывается ли выбранный диапазон с диапазоном / маршрутом, уже привязанным к подключенному сетевому устройству, чтобы предотвратить проблемы с конфликтующими диапазонами адресов, используемыми хостом.

С другой стороны, VPN может добавить свой собственный маршруты для перенаправления всего трафика c через туннель VPN. Из-за этого docker не сможет найти "неиспользуемый" диапазон адресов для назначения новой сети.

Подробнее см. ответы на этот вопрос и соответствующий выпуск на GitHub

...