Инженерные заметки
Серверы

Docker networking без магии

Как контейнеры получают адреса, как работают bridge-сети и публикация портов.

· 8 мин чтения

Что создаёт Docker

При установке Docker создаёт мост docker0 и правила iptables или nftables. Контейнеры получают адреса из внутренней подсети и выходят наружу через NAT.

bash
docker network ls
docker network inspect bridge
ip -br address show docker0

Типы сетей

bridge — изолированная сеть на хосте, host — контейнер использует сетевой стек хоста, none — без сети. Для приложений из нескольких контейнеров создавайте собственную bridge-сеть.

Своя сеть и DNS

В пользовательской сети контейнеры находят друг друга по имени.

bash
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.

Диагностика

bash
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 и проверка конфигурации.

20.10.20268 минЧитать