A Compose stack can attach a new empty named volume when redeployment changes the project-scoped volume name or cannot find the original volume.
The old data may still exist in another Docker volume while the recreated service mounts a newly generated volume at the same container path. Common triggers include a changed stack or project name, a renamed volume key, removal with a volume-deleting command, loss of an external declaration, deployment through another manager, or an explicit volume name that now resolves differently. Inventory both the mounted volume and orphaned candidates before restoring data or initializing the app.
Identify the Exact Volume Mounted by the New Container
Inspect the running containerโs mounts and record the volume name, driver, mountpoint, labels, creation time, container destination, and read-write mode. Compare them with pre-redeployment records.
The Ubuntu docker volume inspect command exposes volume identity, allowing the new empty volume to be distinguished from an older unmounted volume with similar naming.
Do not copy data into the new volume until the original is found. Starting the app can create a fresh database and make the destination look intentionally initialized.
Check Whether the Compose Project Name Changed
Compare the old and new project name, stack name, Compose directory, -p option, COMPOSE_PROJECT_NAME, top-level name:, and deployment manager.
Docker explains that Compose normally scopes a volume as project-name plus volume key unless an explicit name or external volume lookup is configured.
Moving the same Compose file into another directory can therefore create a second project and a second volume even when the service and volume keys are unchanged.
Verify Stable Name and External Volume Settings
Compare the top-level volume definition before and after redeployment. Check name:, external:, driver options, interpolation variables, and whether the expected volume exists.
Microsoftโs Docker Compose tutorial notes that named volumes persist independently of container replacement, so a new empty state usually means a different volume identity was attached or the old volume was removed.
Mark a volume external only when its lifecycle is intentionally managed outside the stack. Compose should fail clearly when an external volume is absent rather than silently creating a replacement.
Check Whether a Cleanup Removed the Original Volume
Review deployment logs, scripts, UI actions, pruning jobs, and commands for volume deletion. Compare the volume creation time with the redeployment event.
Red Hat documents that container-managed named volumes have separate storage locations from container writable layers, which is why removing a container and removing its named volume are different lifecycle events.
If the original volume is absent, stop automatic starts and restore only from a verified backup. Do not assume an empty replacement volume contains a recoverable deleted layer.
Compare Stack-Manager Identity and Deployment Method
Record whether the stack was launched by the CLI, Portainer, a NAS app store, Git deployment, or another automation tool. Compare the stack name and environment values stored by that manager.
Portainer requires a descriptive stack name at deployment, and that manager-controlled identity can differ from the directory-based project name used by a manual Compose command.
A manual emergency start can therefore create resources under another project prefix. Pick one deployment owner and document the resolved volume names it creates.
Rule Out Data Hidden Beneath the New Volume Mount
Stop the container and inspect the image or bind path without the named volume attached in a disposable test. Determine whether startup wrote data into the container layer before the volume was mounted.
The Linux mount manual explains that a mount hides pre-existing directory contents, so data can appear missing when a new empty volume covers files created in the image or writable layer.
Do not merge the hidden layer and the old persistent volume blindly. Identify which state is authoritative and use the applicationโs supported recovery method.
Reconnect the Original Volume With a Controlled Test
Stop the stack, back up both candidate volumes, attach the original to a disposable container or temporary service path, and verify application files, database identity, ownership, and timestamps.
The ZimaSpace guide to moving container data without breaking mounts provides the adjacent path-mapping workflow; this article focuses on project-scoped named-volume identity.
The issue is resolved when the intended old volume is mounted under a stable explicit or external name and repeated redeployments reuse it without creating another empty candidate.
Frequently Asked Questions
Does an empty named volume mean the old data was deleted?
Not necessarily. The old volume may still exist under another project prefix or explicit name while the new container uses a different empty volume.
Can changing the Compose folder name create a new volume?
Yes. When no project name is fixed, Compose can derive it from the project directory and create differently prefixed resources.
Should important volumes be marked external?
External volumes can prevent stack removal from managing their lifecycle, but they require deliberate creation, naming, backup, and deployment checks.
Support & Tips
More to Read

Live TV Recording Storage Guide for Capacity, Retention, and Cleanup
Measure real recordings, reserve headroom, combine age and capacity limits, and prove the oldest eligible program is removed before storage fills.

Home Media Metadata Recovery Workflow After a Database Restore
Protect the restored state, verify media identity and paths, then repair missing artwork or matches in a pilot library before broad metadata changes.

Jellyfin Client Compatibility Checklist for Audio, Video, and Subtitles
Test representative files one variable at a time and record Direct Play, remux, audio conversion, video transcode, or failure for every client.

