Сети Docker

Тема дорожной карты · Docker & Containers

Сетевая модель Docker даёт каждому контейнеру свой network namespace и подключает его к виртуальной сети, управляемой движком. Из коробки доступны драйверы bridge, host, none и (в Swarm) overlay; пользовательские сети добавляют DNS-резолв сервисов. В быту — docker network ls/create/inspect/connect и публикация портов через -p host:container. Грабли: использовать дефолтную bridge (без DNS), забыть, что host-режим пропускает port mapping, и не учесть, что на macOS / Windows трафик контейнер-хост идёт через маленькую ВМ.

Как это работает

Сети Docker создаёт виртуальные сети для общения контейнеров между собой. Дефолтный 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 — контейнеры приходят и уходят.

Типичные ошибки

Ловушки Сети Docker: публикация всех портов (docker run -P) без раздумий и выставление внутренних сервисов в интернет; дефолтная сеть bridge и удивление, что DNS не работает (переходите на user-defined); путаница EXPOSE (только документация) и -p (реальный NAT); непонимание, что localhost внутри контейнера — это сам контейнер, не хост (используйте host.docker.internal в Desktop, --add-host в Linux). docker network inspect mynet — когда трафик идёт не туда.

Связанные понятия

Полезные ресурсы