Docker networking без магии
Как контейнеры получают адреса, как работают bridge-сети и публикация портов.
· 8 мин чтения
Что создаёт Docker
При установке Docker создаёт мост docker0 и правила iptables или nftables. Контейнеры получают адреса из внутренней подсети и выходят наружу через NAT.
docker network ls
docker network inspect bridge
ip -br address show docker0Типы сетей
bridge — изолированная сеть на хосте, host — контейнер использует сетевой стек хоста, none — без сети. Для приложений из нескольких контейнеров создавайте собственную bridge-сеть.
Своя сеть и DNS
В пользовательской сети контейнеры находят друг друга по имени.
docker network create appnet
docker run -d --name db --network appnet postgres:16
docker run --rm --network appnet alpine ping -c 2 dbВ сети по умолчанию bridge такого встроенного разрешения имён нет.
Публикация портов
Флаг -p 8080:80 пробрасывает порт хоста в контейнер через правила DNAT.
-p 8080:80 публикует порт на всех интерфейсах. Если сервис нужен только локально, пишите -p 127.0.0.1:8080:80.Диагностика
docker exec -it web sh
ss -tulpn
docker logs --tail 50 web
sudo iptables -t nat -L -n | headПроверьте: слушает ли приложение 0.0.0.0 внутри контейнера, а не 127.0.0.1, и находятся ли контейнеры в одной сети.
Вывод
Сеть Docker — это обычные Linux-инструменты: мосты, адреса и NAT. Зная их, проблемы решаются теми же командами, что и на хосте.
Связанные статьи
Nginx как reverse proxy
Проксирование приложения через Nginx: заголовки, таймауты, WebSocket и проверка конфигурации.
Диагностика сети Linux: от ping до tcpdump
Последовательный подход к сетевым проблемам: интерфейс, маршрут, DNS, порт, пакеты.