Почему я должен периодически использовать `docker network prune` для повторного включения IP-подключений docker mapping внутри контейнера?

#docker #docker-for-mac

#docker #docker для Mac

Вопрос:

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

Ответ №1:

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

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

Вы можете указать docker выбирать сети только из выбранного вами пула подсетей. Вам нужно будет определить подсети, используемые вашей VPN, дома, офиса, кафе и т.д., А затем выбрать частный диапазон IP-адресов за пределами любой из этих подсетей для docker. Конфигурация для этого находится в демоне.файл json для мостовых сетей (на Mac вы переходите к значку docker, открываете настройки / предпочтения, переходите к 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-адреса моста, он же docker0, или сети моста с именем bridge. Адрес bip должен быть действительным, поэтому не заканчивайте его 0 или 255, он будет использоваться для шлюза, а маска ( /24 ) будет использоваться для указания размера подсети.

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

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

 $ 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
  

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

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