Linux

Создание bind-монта в Docker для персистентного хранения данных

В этом гайде вы узнаете, что такое bind-монта в Docker, зачем она нужна и как быстро её настроить с помощью Docker CLI и Docker Compose. После выполнения инструкции ваши данные в контейнере будут сохраняться даже после его остановки.

Обновлено 17 июля 2026 г.
5-10 мин
Средняя
FixPedia Team
Применимо к:Docker 20.10+Ubuntu 22.04Debian 11

Введение

Bind-монта — это способ напрямую смонтировать директорию операционной системы хоста в контейнер Docker. Это полезно для хранения данных, которые нужно сохранить после остановки или удаления контейнера, например баз данных, логов или конфигурационных файлов. После выполнения этого гайда вы сможете быстро настроить bind-монта как с помощью docker run, так и с помощью Docker Compose.

Требования

  • ОС Linux с установленным Docker (≥ 20.10).
  • Права на запись в директорию, которую вы хотите смонтировать (рекомендуется использовать пользователя с правами root или настроить владение).
  • Базовый контейнер-образ (например, alpine, ubuntu).

Пошаговая инструкция

Шаг 1: Установка Docker на систему

Убедитесь, что Docker уже установлен (docker --version). На Ubuntu/Debian используйте apt install docker.io, затем перезапустите службу: sudo systemctl restart docker.

Шаг 2: Создание директории на хосте

Создайте каталог, который будете монтировать, например, mkdir -p ~/docker_data. Вы можете расположить его где угодно, но путь должен быть доступен для чтения/записи.

Шаг 3: Запуск контейнера с bind-монтом

Запустите контейнер, сопоставив директорию хоста с путём внутри контейнера:

docker run -d \
  --name test-container \
  -v ~/docker_data:/data \
  alpine/sh ECHO "Mount point available"

-v ~/docker_data:/data создает bind-монтирование. Флаг -d запускает контейнер Detached.

Шаг 4: Проверка монтирования

Проверьте список монтируемых точек: docker inspect test-container | grep -A 10 'Mounts'. Также войдите в контейнер (docker exec -it test-container sh) и проверьте ls /data.

Проверка результата

Если ls /data показывает содержимое директории хоста, bind-монта работает корректно. Для дополнительной уверенности запишите файл в /data на хосте (echo test > ~/docker_data/file.txt) и проверьте его внутри контейнера — изменения сразу будут видны.

Возможные проблемы

  • Ошибка доступа: может появиться, если владелец директории на хосте не совпадает с пользователем в контейнере. Решение: измените владельца (sudo chown -R $USER:$USER ~/docker_data) или настроить права (chmod 755).
  • Путь не существует: Docker не может смонтировать несуществующую директорию. Убедитесь, что ~/docker_data существует перед запуском контейнера.
  • Повторное монтирование: нельзя монтировать одну и ту же хост-директорию в несколько контейнеров одновременно без флага --rm. Используйте разные контейнеры с разными путями или удаляйте старые контейнеры перед повторным монтированием.

Если bind-монта — это не то, что вам нужно, рассмотрите использование типов Volumes (-v с именем) или tmpfs для временных данных. Связанные гайды помогут вам освоить альтернативные методы управления хранилищем в Docker.

Часто задаваемые вопросы

Зачем использовать bind-монта вместо типов Volumes в Docker?
Как избежать ошибок прав доступа при создании bind-монта?
Как определить bind-монта в Docker Compose?
Что делать, если bind-монта не отображается внутри контейнера?

Полезное

Установка Docker на систему
Создание директории на хосте
Запуск контейнера с bind-монтом
Проверка монтирования