Host network — один из сетевых режимов Docker. При --network=host контейнер не создаёт собственный сетевой namespace: процессы внутри видят те же сетевые интерфейсы, IP-адреса и порты, что и хост. Нет NAT, нет маппинга портов. Если приложение слушает порт 80 — он сразу доступен на хосте на порту 80.
Режимы сети Docker
- bridge (по умолчанию) — контейнер в изолированной сети, доступ через маппинг портов (
-p 80:80). - host — без изоляции, контейнер использует сеть хоста.
- none — без сети вообще.
- overlay — сеть между несколькими хостами (Docker Swarm).
- macvlan — контейнер получает MAC-адрес и выглядит как физическое устройство.
Когда использовать host network
Host network применяется в ситуациях, когда производительность сети критична (мониторинг, захват пакетов, высоконагруженные прокси) или когда приложение должно использовать многочисленные динамические порты (FTP passive mode, SIP). При использовании --network=host нет накладных расходов NAT/iptables.
Риски
Host network убирает сетевую изоляцию контейнера: если приложение скомпрометировано, атакующий имеет прямой доступ ко всем сетевым интерфейсам хоста. Не рекомендуется для контейнеров с недоверенным кодом или публичных приложений.
История
Host network поддерживается с Docker 0.5 (2013). В Kubernetes host network доступен через hostNetwork: true в спецификации Pod. Linux network namespaces, лежащие в основе изоляции, появились в ядре 2.4.19 (2002).
Связь с хостингом
На VDS host network используется для контейнеров мониторинга (Prometheus node_exporter) и инструментов диагностики сети. В продакшн-деплоях предпочтительнее bridge с явным маппингом портов — это лучше документирует и контролирует доступ. Docker Compose поддерживает network_mode: host.
Сетевые режимы Docker
| Режим | Изоляция | Производительность | Применение |
|---|---|---|---|
| bridge (по умолчанию) | изолирован | средняя | большинство приложений |
| host | нет | максимальная | сетевые инструменты |
| none | полная | — | offline-задачи |
| overlay | кластерная | средняя | Kubernetes, Swarm |
| macvlan | L2-изоляция | высокая | прямой MAC-адрес |
Когда использовать host network
Host network необходим когда контейнер должен видеть все сетевые интерфейсы хоста: мониторинговые агенты (Telegraf), сетевые сканеры, приложения с UDP multicast. При --network host контейнер использует тот же сетевой стек, что и VPS-хост: порт 80 в контейнере = порт 80 на сервере без маппинга.
История и особенности host network в Docker
Host network режим доступен с Docker 1.0 (2014). На macOS и Windows работает через виртуальную машину — реального разделения сетевого стека нет. Поддерживается только на Linux. В Kubernetes аналог — hostNetwork: true в Pod spec. Несовместим с опцией -p (публикация портов): порты уже принадлежат хосту.
Типичные ошибки
- Запуск веб-приложения в host mode — контейнер занимает порт 80 напрямую, конфликт с Nginx.
- Использование host network для изоляции микросервисов — полная противоположность цели.
- На Docker Desktop (Mac/Windows) host network не работает как ожидается.