host-сеть docker в docker-compose
Для использования host
-сети в docker-compose
достаточно указать в конфигурации сети тип host
. Это позволяет контейнеру использовать сетевой стек хоста, как при запуске с флагом --network host
в Docker CLI.
Пример конфигурации с host
-сетью в Docker Compose
Допустим, вы хотите запустить веб-сервер Nginx с использованием host
-сети. Вот пример файла docker-compose.yml
:
1 2 3 4 5 6 7 |
version: '3.8' services: web: image: nginx network_mode: host # Указываем использование host-сети |
Ключевые моменты:
- network_mode: host — эта строка сообщает Docker Compose использовать сетевой стек хоста. Контейнер получит доступ к тем же интерфейсам и IP, что и хост, и будет использовать те же порты.
- Отсутствие необходимости указывать порты: так как контейнер уже использует сеть хоста напрямую, вам не нужно использовать
ports
для проброса портов — он уже будет доступен на тех же портах, что и хост.
Как запустить
Запустите команду, чтобы поднять сервис:
1 2 |
docker-compose up -d |
Теперь контейнер Nginx будет доступен по IP-адресу хоста и порту 80.
Ограничения и особенности
- Работа только на Linux:
host
-сеть поддерживается только в Linux-контейнерах и не работает на Windows. - Нет изоляции между сервисами: каждый сервис, использующий
network_mode: host
, будет иметь доступ к сети хоста и не будет изолирован от других контейнеров на уровне сети. - Конфликты портов: если несколько сервисов в Docker Compose используют
host
-сеть и один и тот же порт, это может вызвать конфликты. Убедитесь, что порты, которые использует контейнер, не заняты другим приложением или контейнером на хосте.
Пример с несколькими сервисами
Если вам нужно использовать host
-сеть только для одного сервиса, например для сервиса web
, а остальные сервисы оставить изолированными, это также возможно. Например:
Recommended Posts
Что такое docker:dind и как он работает?
22.03.2023
Что такое Kubernetes
10.02.2023