Введение
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.