intermediate
Сети
Соединяйте контейнеры через изолированные bridge-сети, имена сервисов, публикацию портов и явные границы с хостом.
Сети Docker дают контейнерам DNS-имена и изолированное общение. В Compose сервисы обычно вызывают друг друга по имени сервиса во внутренней bridge-сети; доступ с хоста — через осознанную публикацию портов.
services:
api:
build: .
ports:
- "3000:3000"
db:
image: postgres:16
# без publish на хост — только внутри сети
Внутри контейнера `localhost` — это сам контейнер, не хост и не соседние сервисы. Используйте имя сервиса (`postgres`, `redis`) как hostname в сети compose.
На интервью: bridge-сети, published ports, путаница с localhost, DNS-имена и разделение внутреннего и публичного трафика.
Типовые ошибки: публикация портов БД или admin UI на хост; `127.0.0.1` для зависимостей внутри compose.
Компромисс — удобная отладка с хоста (много published ports) против меньшей attack surface и реалистичной сети.
Чеклист:
- Внутренние вызовы по именам сервисов.
- Публиковать только нужные порты.
- Разделять внутренний и внешний трафик.
- Документировать URL на хосте vs внутри сети.