# Docker Volume Mount Failed: Complete Troubleshooting Guide
You're trying to start a container with a volume mount, but it fails immediately. The error messages can be cryptic—"permission denied", "no such file or directory", or just a vague mount error. Volume mounts are essential for persistent data, but when they fail, containers can't start.
Common error messages:
docker: Error response from daemon: error while mounting volume: mount target does not exist.Or:
docker: Error response from daemon: error while creating mount source path: mkdir /host/path: permission denied.Or:
ERROR: for myapp Cannot create container for service myapp: error while mounting volume: invalid mount config: invalid mount destinationUnderstanding Volume Types
Docker has three main volume types:
- 1.Named volumes - Managed by Docker, stored in
/var/lib/docker/volumes/ - 2.Bind mounts - Direct mapping of host path to container path
- 3.tmpfs mounts - Stored in memory only
Each has different failure modes.
Diagnosing Mount Failures
Check Volume Exists
For named volumes:
docker volume ls
docker volume inspect <volume_name>Check Host Path Exists
For bind mounts:
ls -la /host/path/to/mountInspect Container Configuration
docker inspect <container_name> --format '{{json .Mounts}}' | jqCheck Docker Daemon Logs
journalctl -u docker.service --no-pager -n 100Common Causes and Fixes
Cause 1: Host Path Does Not Exist (Bind Mount)
Docker can't mount a path that doesn't exist on the host.
Symptoms:
``
Error: error while mounting volume: mount target does not exist
Diagnosis:
``bash
# Check if path exists
ls -la /host/path/to/mount
Fix 1: Create the directory first
mkdir -p /host/path/to/mount
docker run -v /host/path/to/mount:/container/path <image>Fix 2: Let Docker create it
Docker will create the directory if you remove the trailing slash from older Docker versions, but the modern approach is to always create it:
# On modern Docker, if parent exists, Docker creates the final directory
docker run -v /existing/parent/newdir:/container/path <image>Cause 2: Permission Denied
The Docker daemon can't access the host path due to permissions.
Symptoms:
``
Error: error while creating mount source path: permission denied
Diagnosis: ```bash # Check permissions ls -la /host/path/to/mount stat /host/path/to/mount
# Check SELinux context (CentOS/RHEL/Fedora) ls -Z /host/path/to/mount ```
Fix 1: Adjust permissions
```bash # Make directory accessible chmod 755 /host/path/to/mount
# For data that container user needs to write chmod 777 /host/path/to/mount ```
Fix 2: SELinux issues
On SELinux-enabled systems, you need the :z or :Z suffix:
```bash # For volumes shared between containers docker run -v /host/path:/container/path:z <image>
# For volumes private to this container docker run -v /host/path:/container/path:Z <image> ```
In Docker Compose:
services:
myapp:
image: myimage:latest
volumes:
- /host/path:/container/path:zFix 3: Run with proper user
```bash # Check what user the container runs as docker run --rm <image> whoami
# If needed, adjust host ownership chown -R 1000:1000 /host/path/to/mount ```
Cause 3: Invalid Mount Destination
The container path cannot be / or contain special characters.
Symptoms:
``
Error: invalid mount config: invalid mount destination
Fix: Use valid container paths
```bash # Wrong docker run -v /host/path:/ <image>
# Correct docker run -v /host/path:/data <image> ```
Avoid paths that Docker uses internally:
- /
- /.dockerenv
- Any path containing .. or //
Cause 4: Mounting Over Important Directories
You're trying to mount over directories like /usr, /bin, /etc.
Symptoms: - Container fails to start - Binary execution fails - Very unpredictable behavior
Fix: Use different mount points
```bash # Wrong - can break the container docker run -v /host/path:/usr <image>
# Correct - use /data or /app/data docker run -v /host/path:/data <image> ```
Cause 5: Named Volume Issues
Named volumes have their own set of problems.
Symptoms:
``
Error: error while mounting volume: volume "myvolume" not found
Diagnosis:
``bash
docker volume ls
docker volume inspect myvolume
Fix 1: Create volume first
docker volume create myvolume
docker run -v myvolume:/container/path <image>Fix 2: Check volume driver
If using a volume driver, ensure it's installed and working:
docker volume create --driver local myvolumeFor network volumes (NFS, etc.):
docker volume create \
--driver local \
--opt type=nfs \
--opt o=addr=192.168.1.1,rw \
--opt device=:/export/data \
mynfsCause 6: Read-Only Mount Issues
Mounting with :ro but application needs to write.
Symptoms:
``
Error: read-only file system
Diagnosis:
``bash
# Check mount options
docker inspect <container> --format '{{range .Mounts}}{{.Mode}}{{end}}'
Fix: Adjust mount mode
```bash # Read-only mount docker run -v /host/path:/container/path:ro <image>
# Read-write mount (default) docker run -v /host/path:/container/path <image>
# Read-write with SELinux docker run -v /host/path:/container/path:rw,z <image> ```
Cause 7: Docker Desktop Path Issues (macOS/Windows)
On Docker Desktop, paths must be in shared directories.
Symptoms:
``
Error: Mounts denied: The path /host/path is not shared from the host
Fix: Configure shared paths in Docker Desktop
- 1.Open Docker Desktop Settings
- 2.Go to Resources > File Sharing
- 3.Add the host path
- 4.Apply & Restart
For Windows, use proper path format:
```bash # Wrong docker run -v C:\Users\myuser\data:/data <image>
# Correct docker run -v /c/Users/myuser/data:/data <image> # or docker run -v //c/Users/myuser/data:/data <image> ```
For macOS:
# Must be in shared directories
docker run -v /Users/myuser/data:/data <image>Cause 8: Container Path Conflicts
Mounting over a path that has files in the image.
Symptoms: - Files that should exist are missing - Application can't find its files - Configuration changes not reflected
Diagnosis:
``bash
# Check what's at the path in the image
docker run --rm <image> ls -la /container/path
Fix: Understand the behavior
When you mount, the host content replaces the container content. This is expected:
```bash # If /app/config has files in the image # After mounting, /app/config shows host files, image files are hidden
# To keep image files and add host files, use a subdirectory docker run -v /host/config:/app/config/override <image> ```
Cause 9: Mount Propagation Issues
Mount events not propagating between host and container.
Symptoms: - Files created on host not visible in container - Changes not syncing
Fix: Set propagation mode
```bash # Shared - both directions docker run -v /host/path:/container/path:shared <image>
# Slave - container sees host changes docker run -v /host/path:/container/path:slave <image>
# Private (default) - no propagation docker run -v /host/path:/container/path:private <image> ```
Verification Steps
After fixing the mount issue:
- 1.Verify mount exists in container:
- 2.```bash
- 3.docker exec <container> ls -la /container/path
- 4.docker exec <container> df -h /container/path
- 5.
` - 6.Test read access:
- 7.```bash
- 8.docker exec <container> cat /container/path/testfile
- 9.
` - 10.Test write access (if required):
- 11.```bash
- 12.docker exec <container> sh -c "echo test > /container/path/testwrite"
- 13.
` - 14.Check mount details:
- 15.```bash
- 16.docker inspect <container> --format '{{json .Mounts}}' | jq
- 17.
` - 18.Verify host-side changes:
- 19.```bash
- 20.echo "from host" > /host/path/testfromhost
- 21.docker exec <container> cat /container/path/testfromhost
- 22.
`
Best Practices
- Always create host directories before mounting - Don't rely on Docker to create them
- Use named volumes for data you want Docker to manage - Easier backups and portability
- Use bind mounts for configuration and development - Direct access from host
- Set appropriate permissions before starting containers - Avoid permission issues
- **Use
:zfor SELinux systems** - Let Docker handle the labeling - Avoid mounting over system directories - Use
/data,/app/data, or custom paths - Document volume requirements - Make it clear what paths need to exist
Volume mount failures are almost always about permissions, paths, or SELinux contexts. Check the host path exists, verify permissions, and use the correct mount options for your system.