hostprofi.ru
Подобрать хостинг
Термин

Bind mount

краткое определение

Монтирование директории хоста внутрь Docker-контейнера для прямого доступа к файлам.

Bind mount — механизм монтирования директории или файла с хоста внутрь контейнера Docker. В отличие от Docker volumes (управляемых Docker), bind mount использует конкретный путь файловой системы хоста — изменения видны немедленно с обеих сторон.

Как работает

При создании bind mount ядро Linux связывает два пути файловой системы через механизм mount --bind. Содержимое хост-директории появляется в контейнере по указанному пути. Любой файл, созданный контейнером, остаётся на хосте после его остановки — в отличие от данных в слоях контейнера, которые исчезают при docker rm.

Синтаксис

# Короткий синтаксис (-v)
docker run -v /host/path:/container/path nginx

# Длинный синтаксис --mount (рекомендуется)
docker run --mount type=bind,source=/host/path,target=/container/path nginx

# Только чтение (защита от изменений контейнером)
docker run --mount type=bind,source=/etc/nginx,target=/etc/nginx,readonly nginx

# В docker-compose.yml
services:
  web:
    image: nginx
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
      - ./html:/usr/share/nginx/html

История

Bind mount существует в Linux с ядра 2.4.0 (2001 год) как часть VFS. Docker адаптировал этот механизм для изоляции контейнеров. Изначально bind mount был единственным способом сохранить данные — Docker Volumes появились позже как управляемая абстракция. В 2017 году Docker добавил синтаксис --mount как более явную и безопасную альтернативу флагу -v.

Bind mount vs Docker Volumes

КритерийBind mountDocker Volume
УправлениеПуть задаёт пользовательDocker создаёт в /var/lib/docker/volumes/
ПортируемостьЗависит от хостаПереносится между хостами
ПроизводительностьПрямой доступ к ФСЧуть медленнее на macOS/Windows
ИспользованиеРазработка, конфигиБазы данных, продакшен-данные

Практическое применение

Разработка: -v $(pwd):/app позволяет редактировать код на хосте и немедленно видеть изменения в контейнере без пересборки образа. Это стандартный подход при работе с Node.js или PHP-проектами.

Конфигурация: монтирование nginx.conf позволяет менять настройки Nginx без пересборки образа — достаточно изменить файл на хосте и перезапустить контейнер. Флаг :ro защищает от случайной записи контейнером.

Интеграция с Kubernetes: аналог bind mount в k8s — hostPath volume. Используется для доступа к сокетам хоста (например, /var/run/docker.sock для DinD) и к специфичным для узла файлам.

На что обращать внимание

Права доступа: если контейнер запускается от root (UID 0), а хост-директория принадлежит обычному пользователю, возможны конфликты. Флаг :z или :Z (на системах с SELinux) настраивает метки безопасности автоматически. Монтирование /var/run/docker.sock даёт контейнеру полный доступ к Docker-демону хоста — это серьёзная уязвимость, избегайте в продакшене.

В продакшене bind mount часто заменяют ConfigMapKubernetes) или Docker secrets (в Swarm). Для персистентных данных — Docker Volumes управляемые containerd: они переживают пересоздание контейнера и легко бэкапируются через docker run --volumes-from.

Другие термины