Многоузловая сеть (overlay)
Тема дорожной карты · Docker & Containers
Overlay-сети позволяют контейнерам на разных хостах общаться так, будто они в одном L2-сегменте: трафик инкапсулируется через VXLAN поверх underlay-сети. Драйвер overlay требует Swarm-режима (docker swarm init + docker swarm join) и недоступен из обычного docker run на отдельной ноде. Подходит для Swarm-сервисов с east-west трафиком; в Kubernetes вместо этого используют CNI-плагины (Calico, Cilium, Flannel). Грабли: шифрование (--opt encrypted) бьёт по пропускной способности, и между хостами нужен открытый UDP 4789.
Как это работает
Многоузловая сеть (overlay) создаёт виртуальные сети для общения контейнеров между собой. Дефолтный bridge (bridge) даёт каждому контейнеру IP, но не имеет DNS-discovery по имени. User-defined bridge (docker network create mynet) добавляет автоматический DNS — контейнеры достижимы по имени. Host networking (--network host) пропускает namespace; контейнер делит сетевой стек хоста. Overlay-сети — для multi-host Swarm. Публикация портов (-p 8080:80) — NAT с хоста на контейнер.
Когда применять
Всегда создавайте именованную user-defined сеть для compose-стеков (compose делает сам) — DNS-discovery бьёт жонглирование IP. Host networking — только для raw kernel-производительности или конкретного порта, который NAT не переводит. Публикуйте только порты, нужные внешнему миру; остальное живёт во внутренней сети. Для service-to-service трафика в production предпочитайте DNS-имена hardcoded IP — контейнеры приходят и уходят.
Типичные ошибки
Ловушки Многоузловая сеть (overlay): публикация всех портов (docker run -P) без раздумий и выставление внутренних сервисов в интернет; дефолтная сеть bridge и удивление, что DNS не работает (переходите на user-defined); путаница EXPOSE (только документация) и -p (реальный NAT); непонимание, что localhost внутри контейнера — это сам контейнер, не хост (используйте host.docker.internal в Desktop, --add-host в Linux). docker network inspect mynet — когда трафик идёт не туда.