Docker LinuxDocker Desktop

Docker: Как безопасно сохранить данные тома перед обновлением контейнера

  • Обновлено
  • Чтение ≈ 3 минуты

Краткий ответ

Перед обновлением контейнера нужно сохранять не только его образ, но и содержимое используемых именованных томов. Для работающей СУБД простая копия каталога может быть несогласованной — предпочтительна штатная логическая или снимковая копия.

В этой статье
  1. Как проявляется проблема и где искать причину
  2. Пошаговая диагностика и устранение
  3. Как проверить результат
  4. Если исправление не помогло

#Как проявляется проблема и где искать причину

Перед обновлением контейнера нужно сохранять не только его образ, но и содержимое используемых именованных томов. Для работающей СУБД простая копия каталога может быть несогласованной — предпочтительна штатная логическая или снимковая копия.

Возможная причинаКак узнатьЧто делать
Данные в томеПапка базы/загрузок примонтирована из Docker volumedocker inspect показывает Mounts Type=volumeРезервировать конкретный том
Файлы меняются во время копированияРабочая база пишет в том одновременно с tarАрхив может содержать файлы разного состоянияОстановить запись или применить штатную копию СУБД

#Пошаговая диагностика и устранение

  1. 1. Составьте карту томов приложенияВыберите контейнер и выполните inspect. В Mounts запишите Type, Source, Destination и имя тома. У bind mount резервируется каталог хоста, для named volume — содержимое volume.
  2. Чтение; имя тома видно в Name для Type=volume
    Linux · Терминал (Bash)Команда
    Чтение; имя тома видно в Name для Type=volume.
    docker inspect --format "{{json .Mounts}}" ИМЯ_КОНТЕЙНЕРА
  1. 2. Убедитесь, что том действительно существуетСверьте список именованных томов и укажите точное имя в дальнейших действиях. Если вы видите Bind, не используйте схему архива именованного тома — сохраните исходный каталог по правилам ОС.
  2. Чтение; не запускайте docker volume prune
    Linux · Терминал (Bash)Команда
    Чтение; не запускайте docker volume prune.
    docker volume ls
  1. 3. Обеспечьте согласованное состояниеЕсли том содержит MySQL, PostgreSQL, SQLite или другую базу, сначала получите проверенную логическую копию штатными средствами либо используйте корректный снимок с паузой записи. Для файлового хранилища запланируйте окно обслуживания и временно остановите запись; проверьте, что приложение не меняет файлы во время архивации.
  1. 4. Создайте папку для копии на хостеВ терминале Linux/macOS создайте отдельный каталог вне тома Docker и перейдите в него. Убедитесь, что там достаточно свободного места и права доступа ограничены.
  2. На Linux/macOS; для PowerShell используйте New-Item и Set-Location
    Linux · Терминал (Bash)Команда
    На Linux/macOS; для PowerShell используйте New-Item и Set-Location.
    mkdir -p "$HOME/docker-volume-backup" && cd "$HOME/docker-volume-backup"
  1. 5. Сделайте архив выбранного томаПосле согласованной остановки записи выполните команду с заменой ИМЯ_ТОМА. Том монтируется только для чтения; архив пишется в текущую папку хоста. Потребуется доступ к Docker и разрешение образа alpine в вашей сети.
    Linux · Терминал (Bash)С осторожностью
    Linux/macOS shell; данные не модифицируются, но архив может содержать секреты.
    docker run --rm --mount type=volume,src=ИМЯ_ТОМА,dst=/data,readonly --mount type=bind,src="$(pwd)",dst=/backup alpine tar -czf /backup/volume-backup.tgz -C /data .

    Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

  1. 6. Проверьте целостность архиваУбедитесь, что файл существует и tar способен прочесть заголовки. Важно: это не доказывает консистентность базы данных; нужна отдельная проверка приложения на восстановленной копии.
  2. Linux/macOS; чтение архива, имена файлов могут быть конфиденциальными
    Linux · Терминал (Bash)Команда
    Linux/macOS; чтение архива, имена файлов могут быть конфиденциальными.
    tar -tzf volume-backup.tgz | head -30
  1. 7. Проведите пробное восстановление на другом томеСоздайте новый тестовый том с уникальным именем и восстановите архив только в него, после проверки отсутствия существующих данных. Не используйте имя рабочего тома и не переключайте рабочее приложение на пробную копию.
  2. Создаёт отдельный том; предварительно убедитесь, что том с таким именем не существует
    Linux · Терминал (Bash)С осторожностью
    Создаёт отдельный том; предварительно убедитесь, что том с таким именем не существует.
    docker volume create whelp-restore-test

    Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

  1. 8. Проверьте приложение и срок храненияВ изолированном тесте восстановите файл в созданный том по официальной инструкции Docker Volumes и проверьте открытие данных и контрольные записи. Запишите дату, версию образа, имя тома, место хранения и время восстановления. Затем обновляйте контейнер в согласованное окно.

#Как проверить результат

Есть датированный архив, восстановление прошло на отдельном томе, приложение видит контрольные записи; только после этого обновляйте рабочий образ.

#Если исправление не помогло

Если база активно изменяется и невозможно обеспечить согласованную копию, не считайте tar полноценным резервированием. Используйте резервирование уровня СУБД с проверкой восстановления.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.