| name | docker-volumes |
| description | Implement persistent storage with Docker volumes, bind mounts, and backup strategies |
| sasmp_version | 1.3.0 |
| bonded_agent | 04-docker-volumes |
| bond_type | PRIMARY_BOND |
Docker Volumes Skill
Master Docker persistent storage including named volumes, bind mounts, tmpfs, and data backup/restore procedures.
Purpose
Implement reliable data persistence for containers with proper volume management, backup strategies, and permission handling.
Parameters
| Parameter | Type | Required | Default | Description |
|---|
| volume_name | string | No | - | Name for the volume |
| mount_type | enum | No | volume | volume/bind/tmpfs |
| backup | boolean | No | false | Include backup commands |
Storage Types
| Type | Persistence | Use Case | Managed By |
|---|
| Named Volume | Yes | Production data | Docker |
| Bind Mount | Yes | Development, configs | Host |
| tmpfs | No (memory) | Secrets, temp files | Docker |
| Anonymous | Container lifetime | Scratch space | Docker |
Volume Operations
Named Volumes
docker volume create app_data
docker run -d \
-v app_data:/var/lib/postgresql/data \
postgres:16-alpine
docker volume inspect app_data
docker volume ls
docker volume prune
Bind Mounts
docker run -d \
-v $(pwd)/src:/app/src \
node:20-alpine
docker run -d \
-v /etc/app/config.yaml:/app/config.yaml:ro \
myapp
tmpfs Mounts
docker run -d \
--tmpfs /app/secrets:rw,noexec,nosuid,size=64m \
myapp
services:
app:
volumes:
- type: tmpfs
target: /app/tmp
tmpfs:
size: 100m
Docker Compose Volumes
services:
database:
image: postgres:16-alpine
volumes:
- db_data:/var/lib/postgresql/data
- ./init.sql:/docker-entrypoint-initdb.d/init.sql:ro
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
app:
image: myapp
volumes:
- uploads:/app/uploads
- ./config:/app/config:ro
volumes:
db_data:
driver: local
uploads:
external: true
Backup & Restore
Backup Volume
docker run --rm \
-v app_data:/source:ro \
-v $(pwd)/backups:/backup \
alpine tar cvf /backup/app_data_$(date +%Y%m%d).tar -C /source .
docker run --rm \
-v app_data:/source:ro \
-v $(pwd)/backups:/backup \
alpine tar czvf /backup/app_data_$(date +%Y%m%d).tar.gz -C /source .
Restore Volume
docker run --rm \
-v app_data:/dest \
-v $(pwd)/backups:/backup:ro \
alpine tar xvf /backup/app_data_20240101.tar -C /dest
Clone Volume
docker run --rm \
-v source_volume:/from:ro \
-v target_volume:/to \
alpine cp -av /from/. /to/
Error Handling
Common Errors
| Error | Cause | Solution |
|---|
volume in use | Container running | Stop container first |
permission denied | UID mismatch | Fix ownership |
no space left | Disk full | Clean up or expand |
path not found | Bind mount missing | Create directory |
Permission Fixes
docker run --rm -v app_data:/data alpine ls -la /data
docker run --rm -v app_data:/data alpine chown -R 1000:1000 /data
docker run -v /host/path:/container/path:Z myimage
Troubleshooting
Debug Checklist
Diagnostic Commands
docker volume inspect app_data --format '{{.Mountpoint}}'
docker inspect <container> --format '{{json .Mounts}}'
docker system df -v
Usage
Skill("docker-volumes")
Related Skills
- docker-compose-setup
- docker-production