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