Том подключён, но данные не сохраняются. Куда пишет контейнер?
Том подключён, но данные не сохраняются. Куда пишет контейнер? Пересоздали контейнер приложения — пользовательские данные пропали, а внутри каталога тома пусто. Разберёмся на вымышленном стенде: один контейнер, один том, один путь записи. Артефакт. В compose.yaml том подключён к каталогу /var/lib/app: services: app: image: registry.example.com/stand/app:1.0 volumes: - app-data:/var/lib/app volumes: app-data: При этом приложение настроено писать в другое место. В его конфигурации задан каталог данных — параметр storage.dataDir (имя вымышленное, это не стандарт Docker, а настройка конкретного приложения): storage: dataDir: /opt/app/data Восстановим картину до пересоздания. Команды только читают каталоги; для них нужны работающий сервис app, sh и ls внутри Linux-контейнера: docker compose exec app sh -c 'ls -la /var/lib/app' docker compose exec app sh -c 'ls -la /opt/app/data' По условиям примера настройка действует: /var/lib/app — точка монтирования тома, почти пустая. Данные лежат в /opt/app/data — обычном каталоге внутри контейнера, вне томов и ссылок. Наличие файлов в каталоге само по себе не доказывает, какой процесс туда пишет: вывод опирается на показанный параметр storage.dataDir. Диагностическая развилка. До пересоздания видно только, что данные оказались не в точке монтирования. Если удалить контейнер без переноса данных, записи в /opt/app/data исчезнут с его записываемым слоем. Это ожидаемое поведение в заданных условиях, а не результат запуска примера. Речь не о поломке томов, а о несовпадении точки монтирования и пути записи. Типичная ошибка. Считать, что наличие тома само гарантирует сохранность. Записи приложения сохраняются в томе, только если попадают в смонтированный каталог. Пустой том по умолчанию получает файлы этого каталога из образа; непустой том скрывает их. Данные из старого контейнера так не переносятся. Практический вывод. Сведите путь записи и точку монтирования к одному месту: либо перенастройте приложение на /var/lib/app (storage.dataDir: /var/lib/app), либо смонтируйте том в /opt/app/data. До удаления старого контейнера сохраните согласованную копию данных вне него. Подготовьте том из этой копии с нужными правами до запуска приложения в новом контейнере. Создайте тестовую запись и проверьте её после ещё одного пересоздания с тем же томом. Проверяйте фактический путь записи и сохранность данных после пересоздания. Управление данными и томами входит в программу курса по Docker в УЦ ФОРС. #Docker #Контейнеризация #DevOps #УЦФОРС