Ответ
В Docker bridge
и host
— это два основных сетевых режима, определяющих, как контейнер взаимодействует с сетью хоста и внешним миром.
Bridge (сетевой мост)
Это режим по умолчанию. Docker создает виртуальную изолированную сеть на хост-машине, и каждый контейнер в этой сети получает свой внутренний IP-адрес.
- Изоляция: Контейнеры изолированы от сетевого стека хоста.
- Доступ: Для доступа к сервису внутри контейнера извне требуется явный проброс портов (port mapping) с хоста на контейнер.
- Безопасность: Считается более безопасным из-за изоляции.
Пример:
# Запустить контейнер Nginx и пробросить порт 8080 хоста на порт 80 контейнера
docker run -d -p 8080:80 nginx
Host (сеть хоста)
В этом режиме контейнер разделяет сетевое пространство с хост-машиной, отключая сетевую изоляцию.
- Изоляция: Отсутствует. Контейнер использует IP-адрес и сетевые интерфейсы хоста напрямую.
- Доступ: Проброс портов не нужен. Если сервис в контейнере слушает порт 80, он будет доступен на порту 80 хоста.
- Производительность: Максимальная, так как отсутствует трансляция сетевых адресов (NAT), что снижает задержки.
- Риски: Возможны конфликты портов, если несколько контейнеров или сервисов на хосте пытаются использовать один и тот же порт.
Пример:
# Запустить контейнер Nginx, который будет слушать порт 80 напрямую на хосте
docker run -d --network=host nginx
Когда что использовать:
bridge
: Стандартный выбор для большинства приложений, где важна сетевая изоляция и безопасность.host
: Для приложений, где критична максимальная сетевая производительность и минимальные задержки (например, сетевые сервисы, балансировщики нагрузки), и где можно пожертвовать изоляцией.