Короткий ответ
bridge (режим по умолчанию) создаёт изолированную виртуальную сеть с NAT на хост; host отключает сетевую изоляцию, и контейнер напрямую использует сетевой стек хоста; none отключает сеть вовсе, кроме локального loopback-интерфейса.
Как это работает подробнее
bridge создаёт виртуальный сетевой мост на хосте, к которому подключаются контейнеры, получая собственный IP во внутренней подсети; доступ снаружи требует явной публикации портов (-p). host убирает сетевой namespace контейнера — он напрямую слушает порты хоста, без NAT и без изоляции портов от других процессов хоста. none не подключает контейнер ни к одному сетевому интерфейсу, кроме loopback — используется для процессов, которым сеть вовсе не нужна, либо для максимальной изоляции.
Пример кода
Пример конфигурации
$ docker run -d --network host --name web nginx
$ docker run -d --network none --name isolated alpine sleep 1000Что использовать на практике
- Практика.
bridge— безопасный выбор по умолчанию для большинства сервисов;hostиногда применяют там, где критична сетевая производительность или нужен доступ к сетевым интерфейсам хоста напрямую (с пониманием, что контейнер теряет изоляцию портов);noneиспользуют редко, для batch-задач без сетевого взаимодействия.
Подводные камни
- Риск. используют
--network host"для простоты", не осознавая, что это открывает контейнеру те же порты и сетевые возможности, что есть у самого хоста, и ломает возможность запустить несколько одинаковых контейнеров на разных портах одновременно.