Как зарезервировать Docker-контейнер MinIO (2026)

MinIO требует согласованного дампа до того, как в дело вступит restic. Dockstash выполняет `mc mirror local/<bucket> /backup/<bucket>` внутри контейнера, забирает вывод и хранит его зашифрованным вовне — он никогда не копирует /data вживую, потому что mc mirror копирует каждый объект атомарно через S3 API, сохраняя метаданные, которые сырая копия /data может потерять при multipart-загрузках в полёте.

Обнаружение

Что находит Dockstash

Найденные переменные окруженияMINIO_ROOT_USER, MINIO_ROOT_PASSWORD, MINIO_ACCESS_KEY, MINIO_SECRET_KEY
Порт по умолчанию9000
Живые пути данных (никогда не копируются вживую)/data
Примеры образовminio/minio:latest, minio/minio, quay.io/minio/minio
Шаг за шагом

Резервируем MinIO с Dockstash, шаг за шагом

  1. Создайте аккаунт Dockstash и откройте панель

    Зарегистрируйтесь бесплатно на app.dockstash.com/register. Одноразовый мастер настройки спросит ваш VPS для хранения (машину, где будут лежать зашифрованные резервные копии) и сгенерирует пароль шифрования — сразу сохраните его в менеджере паролей: он показывается ровно один раз.

  2. Добавьте Docker-проект, в котором работает MinIO

    На экране Projects Dockstash автоматически находит каждую папку Compose-проекта на сервере (по умолчанию под /var/www). Выберите проект с вашим сервисом MinIO. Пока ничего не резервируется — вы лишь указываете Dockstash, где живёт проект.

  3. Проверьте, что MinIO распознан

    Откройте проект и вкладку Plan. Dockstash читает docker-compose.yml, распознаёт образ minio/minio и добавляет слой object store, построенный вокруг mc mirror — плюс имя контейнера и найденные переменные (MINIO_ROOT_USER, MINIO_ROOT_PASSWORD или старая пара MINIO_ACCESS_KEY / MINIO_SECRET_KEY). Файлы, базы и конфиги прокси можно переключать перед сохранением.

  4. Опционально: проверьте список бакетов вручную

    Если хотите доказательство до автоматизации, выполните mc ls по алиасу local внутри контейнера. Вы увидите каждый бакет с размером и числом объектов — именно эти бакеты mc mirror скопирует через S3 API, объект за объектом, никогда не сырой каталог /data.

    docker exec <minio-container> mc ls local
  5. Подтвердите место хранения

    Резервные копии хранятся как зашифрованные снимки restic на вашем собственном VPS для хранения, по SSH. Если вы прошли мастер настройки, всё уже настроено; хост, пользователя, порт или SSH-ключ можно изменить в любой момент в Settings → Storage.

  6. Настройте расписание резервного копирования

    Во вкладке Schedule выберите ежедневно, еженедельно или собственный cron (валидируется при вводе). Ежедневно в тихий час — верное умолчание для object store: зеркала инкрементальны, последующие запуски копируют только изменённое. Добавьте еженедельный prune с политикой хранения.

  7. Запустите первую копию сейчас

    Нажмите Backup Now. Dockstash выполнит mc mirror в контейнере, скопирует каждый бакет через S3 API — атомарно захватывая каждый объект с метаданными — и отправит результат в restic. Живой вывод смотрите в панели логов.

  8. Убедитесь, что снимок существует

    По завершении запуска карточка проекта показывает новое время последней копии, число снимков и размер репозитория. Откройте экран Snapshots: точка восстановления появится на таймлайне — это ваше доказательство, что копия дошла до внешнего хранилища.

Команды

Команда дампа

mc mirror local/<bucket> /backup/<bucket>

Команда восстановления

mc mirror /backup/<bucket> local/<bucket>

mc mirror копирует каждый объект атомарно через S3 API, сохраняя метаданные, которые сырая копия /data может потерять при multipart-загрузках в полёте.

Восстановить и проверить

Восстановите копию MinIO и докажите, что она работает

Резервная копия MinIO становится настоящей только после восстановления. Восстановления Dockstash по умолчанию не перезаписывают живые бакеты — сначала в новое место, проверка объектов, затем осознанное продвижение.

  1. Выберите точку восстановления

    Откройте Snapshots, выберите проект и просмотрите таймлайн. Каждая строка — полное зеркало бакетов на уровне API: каждый объект с метаданными и тегами — плюс файлы проекта того же запуска.

  2. Восстановите в новое место

    Нажмите Restore и оставьте режим по умолчанию «Restore to new location». Введите имя проекта для подтверждения — осознанное действие с набором текста. Дамп и файлы попадут в выбранный целевой путь, не трогая живой проект.

  3. Проверьте восстановленные объекты

    Отзеркальте восстановленный бакет в тестовый MinIO и перечислите содержимое через mc ls. Сравните число объектов и общий размер с живым бакетом и выборочно проверьте объекты, которые реально отдаёт приложение — скачивание, которое корректно открывается, — самый быстрый тест.

    docker exec <minio-container> mc ls local/<bucket>
  4. Продвигайте, когда всё проверено

    Когда восстановленные данные проверены, переключите на них приложение (или повторите восстановление в режиме «Overwrite existing» — явный опт-ин). Ещё лучше: пусть еженедельная тренировка восстановления делает это доказательство автоматически, чтобы восстановление никогда не было вашей первой репетицией.

Подводные камни

Каких ловушек избегать

  • Предпочитайте mc mirror копированию сырого каталога /data — MinIO хранит объекты плюс метаданные xl.meta, и сырая копия может потерять multipart-загрузки в полёте.
  • Зеркальте через S3 API, чтобы метаданные, версии и теги объектов сохранялись согласованно.
  • Для версионируемых бакетов реплицируйте версии явно, иначе захватите только последнее состояние каждого объекта.
Устранение неполадок

Типичные проблемы резервирования MinIO

Симптом
Восстановленная копия каталога /data не отдаёт объекты, или MinIO логирует ошибки xl.meta при старте.
Причина
Копию делали сырым копированием /data вместо зеркалирования через S3 API. MinIO хранит каждый объект рядом с метаданными xl.meta; сырая копия, потерявшая или порвавшая их, делает объекты нечитаемыми.
Решение
Резервируйте через mc mirror по S3 API — подход, который Dockstash настраивает по умолчанию. Унаследовали сырую копию — восстановите её в остановленный MinIO той же версии и проверьте каждый бакет mc ls, прежде чем доверять.
Симптом
В копии нет части недавно загруженных объектов.
Причина
Это были multipart-загрузки в полёте, когда шло зеркало — незавершённые загрузки невидимы для S3-листинга до прихода последней части, а сырая копия захватила бы их бесполезными фрагментами.
Решение
Ничего не сломано: следующее плановое зеркало подберёт завершённые объекты. Если важна конкретная загрузка — повторите Backup Now после её окончания или planируйте копии вне окон интенсивной загрузки.
Симптом
Версионируемый бакет восстанавливается с единственной версией каждого объекта.
Причина
Простое mc mirror копирует текущее состояние объектов — старые версии не реплицируются без явной репликации версий.
Решение
Если ради point-in-time вы полагаетесь на версионирование, зеркальте версии явно (mc mirror с репликацией версий) — либо считайте сам таймлайн снимков Dockstash историей версий: каждый ежедневный снимок хранит состояние объектов того дня.
Симптом
Команды mc падают с «Access Denied» или «invalid credentials».
Причина
Учётные данные в compose поменялись (например, ротация MINIO_ROOT_USER / MINIO_ROOT_PASSWORD), а настроенный в контейнере алиас mc держит старую пару.
Решение
Пересоздайте контейнер, чтобы алиас перечитался из текущего env, или выполните в контейнере mc alias set с новыми данными и повторите копию.

Сделайте это в один клик с Dockstash

Dockstash выполняет ровно тот дамп, что выше, передаёт его restic вовне и автоматически проверяет восстановление тренировкой — без скриптов на поддержке.

Последнее обновление: July 2026

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

Резервировать MinIO через mc mirror или копией файлов?

Через mc mirror. Он читает объекты по S3 API: каждый объект с метаданными захватывается атомарно. Сырая копия /data может поймать multipart-загрузки в полёте или потерять раскладку метаданных.

Сохраняет ли mc mirror версии и теги?

Метаданные и теги — да. Для версионируемых бакетов версии нужно зеркалить явно, иначе захватывается только текущая версия каждого объекта.

Можно ли восстановить в свежий MinIO?

Да. Направьте mc на новый инстанс, создайте целевой бакет и отзеркальте каталог копии обратно. Dockstash передаёт отзеркаленные объекты restic между шагами.

Копирование /data когда-нибудь допустимо?

Только при полностью остановленном MinIO без записей в полёте — и даже тогда раскладка метаданных должна сохраниться точно. Зеркало на уровне API — безопасный, поддерживаемый подход.

Как часто резервировать MinIO?

Ежедневно — практичный вариант: mc mirror инкрементален, тихий день почти ничего не стоит. На Free копии вручную (Backup Now); Pro — до ежечасных, Business — любой cron. Добавьте еженедельную тренировку восстановления.

Где на самом деле живут резервные копии?

На вашем собственном VPS для хранения, как зашифрованные снимки restic, отправляемые по SSH. Dockstash никогда не держит ваши данные в чужом облаке — вы указываете машину под вашим контролем, а репозиторий зашифрован паролем, который есть только у вас.

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

Запланируйте тренировку восстановления. Dockstash восстановит последний снимок в изолированную область и сверит каждый файл по байтам с источником — затем поставит значок «прошло/провалено». Еженедельная тренировка непрерывно доказывает, что бакеты возвращаются.