Agent Skills: Docker Volumes Skill

Implement persistent storage with Docker volumes, bind mounts, and backup strategies

dockerpersistent-storagevolumesbackup-strategiesbind-mounts
deploymentID: pluginagentmarketplace/custom-plugin-docker/docker-volumes

Skill Files

Browse the full folder contents for docker-volumes.

Download Skill

Loading file tree…

skills/docker-volumes/SKILL.md

Skill Metadata

Name
docker-volumes
Description
Implement persistent storage with Docker volumes, bind mounts, and backup strategies

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 | |-------|-------|----------| | 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

# 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? ls -la in container
  • [ ] 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