Введение
Монтирование томов Docker — это важный навык для обеспечения долговременного хранения данных в контейнерных средах. В этом гайде вы узнаете, как создать именованный том, подключить его к контейнеру и убедиться, что данные сохраняются даже после перезапуска или удаления контейнера. После выполнения инструкций у вас будет работоспособный том, готовый для хранения конфигураций, баз данных или любых других важных файлов.
Требования
- Docker версии 20.10 или выше (
docker --version). - Операционная система на базе Linux, например Ubuntu 22.04 LTS или Debian 11.
- Базовые знания работы с Docker (
docker run,docker ps,docker volume).
Если Docker не установлен, выполните установку в соответствии с документацией вашей ОС.
Шаг 1: Создать том Docker
Сначала создайте именованный том, который будет использоваться контейнером.
docker volume create data_store
Команда docker volume create генерирует том с указанным именем (data_store) в драйвере по умолчанию (обычно local). Тома существуют вне файловой системы хоста, что упрощает управление данными.
Шаг 2: Запустить контейнер с смонтированным томом
Запустите контейнер, указав том в качестве точки монтирования.
docker run -d -v data_store:/var/lib/app nginx
-dзапускает контейнер в фоновом режиме.-v data_store:/var/lib/appмонтирует томdata_storeв каталог/var/lib/appвнутри контейнера.nginx— пример образа; замените на нужный вам.
Проверьте, что контейнер запущен:
docker ps
Шаг 3: Проверить монтирование тома
Убедитесь, что том подключен правильно.
docker volume ls
Вы должны увидеть data_store со статусом «Local».
Затем проверьте содержимое тома внутри контейнера:
docker exec <container_name_or_id> ls /var/lib/app
Если каталог пуст, вы можете добавить тестовый файл:
docker exec <container_name_or_id> sh -c 'echo "Hello Docker" > /var/lib/app/hello.txt'
Шаг 4: Убедиться в сохранении данных после перезапуска контейнера
Перезапустите контейнер, чтобы проверить, что том сохраняет данные.
docker restart <container_name_or_id>
После перезапуска проверьте файл снова:
docker exec <container_name_or_id> cat /var/lib/app/hello.txt
Вы должны увидеть Hello Docker. Если файл исчез, проверьте монтирование и права доступа.
Шаг 5: Удалить том, когда он больше не нужен
Когда том больше не требуется, удалите его. Убедитесь, что ни один контейнер не использует этот том.
docker volume rm data_store
Docker запросит подтверждение; введите Y, чтобы удалить том.
Проверка результата
- ✅ Том
data_storeсоздан (docker volume ls). - ✅ Контейнер смонтирован с томом (
docker inspect <container>показывает монтирование). - ✅ Данные сохраняются после перезапуска контейнера.
- ✅ Том успешно удален (
docker volume lsбольше не показываетdata_store).
Возможные проблемы
Том не найден в контейнере
Причина: Неправильное имя тома или путь монтирования.
Решение: Проверьте docker volume ls и docker inspect <container>. Убедитесь, что путь монтирования существует внутри контейнера.
Ошибка доступа (Permission denied)
Причина: Неправильные права доступа на хосте или в контейнере.
Решение: Измените права доступа к томовой директории хоста (chmod 775 <host_path>) и убедитесь, что пользователь/группа контейнера имеют необходимые разрешения.
Данные теряются после перезапуска
Причина: Использован Bind‑mount вместо именованного тома, или том смонтирован в /tmp.
Решение: Используйте именованный том (как описано) или укажите постоянный каталог хоста в Bind‑mount.
Невозможно удалить том
Причина: Контейнер все еще использует том.
Решение: Найдите контейнеры, использующие том (docker inspect --format='{{.Name}} {{.Mounts}}' $(docker ps -q)), остановите и удалите их, затем удалите том.