Почему я должен периодически использовать `docker network prune` для включения докера, отображающего ip-соединения внутри контейнера? - PullRequest
2 голосов
/ 24 апреля 2019

Я работаю с использованием vpn большую часть времени, и я заметил, что иногда внешние сетевые соединения не работают, например, при установке из контейнера в удаленном месте отказывается соединение. docker network prune позволяет докеру перераспределять соединения, и тогда я могу продолжить, что бы я ни делал, но что на самом деле здесь происходит под капотом? Использование Docker для Mac, если это актуально.

1 Ответ

1 голос
/ 24 апреля 2019

A docker network prune удаляет все неиспользуемые сети, а затем повторное развертывание проекта с чем-то вроде docker-compose или docker stack deploy воссоздает сети. Когда docker создает сеть, он выбирает из пула частных IP-адресов и исключает любые сети, к которым он может в данный момент направить. Последняя часть - это то, что меняется, когда вы подключаетесь и отключаетесь от VPN или работаете из другого места с другими сетями, видимыми для докера.

Я подозреваю, что вы видите сетевой конфликт. Когда Docker выбирает ту же сетевую подсеть, к которой вы позже подключаетесь (например, включаете VPN или Wi-Fi в новом месте), попытка подключиться к этой внешней сети из контейнера Docker направляется в сеть Docker, а не во внешнюю сеть. Это приводит к сбою ваших соединений.

Вы можете указать докеру выбирать сети только из выбранного пула подсетей. Вам нужно будет определить подсети, используемые вашей VPN, домом, офисом, кафе и т. Д., А затем выбрать частный диапазон IP-адресов за пределами любой из этих подсетей для докера. Конфигурация для этого находится в файле daemon.json для мостовых сетей (на Mac вы переходите к значку докера, открываете настройки / предпочтения, идете в Daemon, а затем дополнительно) выглядит так:

{
  "bip": "10.15.0.1/24",
  "default-address-pools": [
    {"base": "10.20.0.0/16", "size": 24},
    {"base": "10.40.0.0/16", "size": 24}
  ]
}

Параметр «bip» предназначен для IP-адреса моста, aka docker0 или сети моста с именем bridge. Адрес bip должен быть действительным, поэтому не заканчивайте его тем, что 0 или 255 будут использоваться для шлюза, а маска (/24) будет использоваться для указания размера подсети.

Опция «default-address-pool» появилась в 18.06 и определяет подсети для использования в других мостовых сетях, созданных Docker, включая docker network create мосты и любой мост, созданный docker-compose.

Для режима роя, начиная с 18.09, вы можете определить пулы, которые будут использоваться для оверлейных сетей при первом создании роя:

$ docker swarm init \
  --default-addr-pool 10.20.0.0/16 \
  --default-addr-pool 10.40.0.0/16 \
  --default-addr-pool-mask-length 24

Если вам нужно изменить их, вам нужно удалить и воссоздать рой.

Чтобы увидеть сети, используемые в настоящее время, вы можете запустить ip r, чтобы увидеть все маршруты. Первый столбец показывает каждую подсеть и маску в нотации CIDR. Те же обозначения, которые использовались командами docker выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...