#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 выше.