Docker LinuxDocker Desktop

Docker: Изменённые файлы в Docker исчезают после пересоздания контейнера

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

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

После docker compose up --force-recreate или обновления образа исчезают файлы, созданные прямо внутри контейнера. Файловая система контейнера не предназначена для постоянного хранения рабочих данных: их следует размещать в именованном томе или привязанном каталоге хоста.

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

#Как выглядит неисправность

После docker compose up --force-recreate или обновления образа исчезают файлы, созданные прямо внутри контейнера. Файловая система контейнера не предназначена для постоянного хранения рабочих данных: их следует размещать в именованном томе или привязанном каталоге хоста.

#Причины и признаки

Возможная причинаКак узнатьЧто делать
Данные записываются только в слой контейнераПуть не связан с volume или bind mountdocker inspect не показывает Mounts для папки данныхВынести состояние в постоянный том
Смонтирован не тот каталогМонтирование закрывает данные внутри образаПосле создания контейнера видны пустые файлы в точке назначенияПроверить source и destination в Mounts

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

  1. 1. Остановите повторные пересозданияЕсли данные уже пропали, прекратите deploy, который удаляет и создаёт контейнеры. Через docker ps -a найдите прежний остановленный контейнер: если он не удалён, его слой ещё может содержать файлы.
    Linux · Терминал (Bash)Команда
    Чтение списка контейнеров.
    docker ps -a
  1. 2. Посмотрите, где подключено хранилищеПроверьте docker inspect --format ... ИМЯ. В Mounts будут Type=volume или Type=bind, Source на хосте и Destination внутри. Если нужной директории нет в списке, файлы писались в слой контейнера.
    Linux · Терминал (Bash)Команда
    Только чтение монтирований; не показывает содержимое файлов.
    docker inspect --format '{{json .Mounts}}' ИМЯ
  1. 3. Проверьте запись в конфигурации ComposeОткройте compose.yaml и найдите services → имя → volumes. Убедитесь, что путь внутри контейнера совпадает с фактическим путём данных приложения; например, для службы с /app/uploads нужен том именно там, а не только /app/cache.
  1. 4. Снимите резервную копию живых данныхЕсли старый контейнер ещё существует, выполните docker cp ИМЯ:/app/uploads ./uploads-backup в отдельной директории на хосте с достаточным местом. Подставьте свой путь и проверьте содержимое копии до следующего шага. Для активно меняющейся БД требуется согласованный снимок/экспорт, не обычное копирование файлов.
    Linux · Терминал (Bash)С осторожностью
    Копирует выбранные файлы из контейнера на хост; проверяйте путь и свободное место.
    docker cp ИМЯ:/app/uploads ./uploads-backup

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

  1. 5. Настройте постоянное хранилище в тестовой копииВ compose.yaml добавьте именованный том для каталога данных и определение volumes на верхнем уровне. Сначала проверьте docker compose config --quiet. При первом монтировании пустой том или bind mount может скрыть содержимое образа; переносите файлы только после проверки.
    Linux · Терминал (Bash)Команда
    Проверка синтаксиса, без изменений контейнера.
    docker compose config --quiet
  1. 6. Проверьте сохранение после тестового пересозданияВ отдельном тестовом сервисе создайте безвредный файл в каталоге тома, пересоздайте только тестовый контейнер командой docker compose up -d --force-recreate ИМЯ_СЕРВИСА и проверьте файл. Не используйте down -v; данные базы переносите по её официальной процедуре.
    Linux · Терминал (Bash)С осторожностью
    Пересоздаёт указанный сервис, может вызвать простой; тестируйте до публикации.
    docker compose up -d --force-recreate ИМЯ_СЕРВИСА

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

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

После повторного создания тестового контейнера файл в томе остаётся на месте. Для БД отдельно убедитесь, что сохранены таблицы и доступно восстановление из резервной копии.

#Если проблема осталась

Не повторяйте опасные действия на рабочем окружении. Сравните первоначальный симптом с новым состоянием, сохраните обезличенные сообщения и версии компонентов, проверьте резервную копию; перед изменением общей истории Git или данных/сети Docker обратитесь к ответственному администратору проекта.

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

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

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