Claude-skill-registry docker-volumes
Implement persistent storage with Docker volumes, bind mounts, and backup strategies
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/docker-volumes" ~/.claude/skills/majiayu000-claude-skill-registry-docker-volumes && rm -rf "$T"
manifest:
skills/data/docker-volumes/SKILL.mdsource content
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
# Create volume docker volume create app_data # Use in container docker run -d \ -v app_data:/var/lib/postgresql/data \ postgres:16-alpine # Inspect volume docker volume inspect app_data # List volumes docker volume ls # Remove unused volumes docker volume prune
Bind Mounts
# Development - mount source code docker run -d \ -v $(pwd)/src:/app/src \ node:20-alpine # Read-only config docker run -d \ -v /etc/app/config.yaml:/app/config.yaml:ro \ myapp
tmpfs Mounts
# Sensitive data in memory docker run -d \ --tmpfs /app/secrets:rw,noexec,nosuid,size=64m \ myapp # Compose syntax 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 # Pre-created
Backup & Restore
Backup Volume
# Backup to tar file 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 . # Compressed backup 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
# Restore from tar 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 |
|---|---|---|
| Container running | Stop container first |
| UID mismatch | Fix ownership |
| Disk full | Clean up or expand |
| Bind mount missing | Create directory |
Permission Fixes
# Check ownership docker run --rm -v app_data:/data alpine ls -la /data # Fix ownership (match container user) docker run --rm -v app_data:/data alpine chown -R 1000:1000 /data # SELinux (RHEL/CentOS) docker run -v /host/path:/container/path:Z myimage
Troubleshooting
Debug Checklist
- Volume exists?
docker volume ls - Mount visible?
docker exec <c> df -h - Permissions correct?
in containerls -la - Data persisting? Stop/start container
Diagnostic Commands
# Check volume location docker volume inspect app_data --format '{{.Mountpoint}}' # Check container mounts docker inspect <container> --format '{{json .Mounts}}' # Check disk usage docker system df -v
Usage
Skill("docker-volumes")
Related Skills
- docker-compose-setup
- docker-production