
Docker Volumes
- 21 installs
- 2 repo stars
- Updated January 5, 2026
- pluginagentmarketplace/custom-plugin-docker
Docker Volumes is an agent skill that standardizes Docker volume plugin configuration, validation modes, and integration defaults via schema-driven settings.
About
Docker Volumes is a configuration-oriented agent skill from a custom Docker plugin marketplace, aimed at solo builders who containerize apps but need consistent defaults for volume-related behavior. The packaged YAML and JSON Schema define enabled state, log levels, validation strictness, auto-fix flags, and per-environment overrides so development stays permissive while production enforces stricter checks. Integrations for git, linters, and formatters suggest the skill fits into agent-assisted repo workflows rather than one-shot chat advice. For indies shipping Docker Compose or plugin-based stacks, it offers a structured place to encode how volume settings should be validated and reported—useful when you want repeatable agent guidance instead of re-explaining mount policies every session.
- Versioned docker-volumes skill config (1.0.0) under containers category
- Environment overrides: development debug vs production warn with strict validation
- JSON Schema for skill metadata including category enum spanning api through containers
- Integration toggles for git, linter, and formatter
- Markdown output format with optional examples via settings.output
Docker Volumes by the numbers
- 21 all-time installs (skills.sh)
- Ranked #909 of 1,453 DevOps & CI/CD skills by installs in the Skillselion catalog
- Security screen: LOW risk (skills.sh audit)
- Data as of Jul 26, 2026 (Skillselion catalog sync)
npx skills add https://github.com/pluginagentmarketplace/custom-plugin-docker --skill docker-volumesAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 21 |
|---|---|
| repo stars | ★ 2 |
| Security audit | 3 / 3 scanners passed |
| Last updated | January 5, 2026 |
| Repository | pluginagentmarketplace/custom-plugin-docker ↗ |
What it does
Configure and validate Docker volume settings for container plugins with environment-specific strictness and integration hooks.
Who is it for?
Best when you use marketplace Docker plugins and want schema-backed, environment-aware volume configuration in agent sessions.
Skip if: Anyone needing a full Docker tutorial with no plugin context, or pure local scripts with zero container orchestration.
When should I use this skill?
Configuring Docker volume behavior, container persistence, or marketplace docker-volumes plugin settings for an agent
What you get
You apply a single versioned config profile with environment overrides and documented output format for volume-related container work.
- docker-volumes YAML configuration with environment blocks
- JSON Schema–validated skill metadata for containers category
By the numbers
- Skill version 1.0.0 with semver pattern in JSON Schema
- 11 category enum values in configuration schema including containers and devops
Files
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 pruneBind 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 \
myapptmpfs 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: 100mDocker 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-createdBackup & 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 /destClone 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 myimageTroubleshooting
Debug Checklist
- [ ] Volume exists?
docker volume ls - [ ] Mount visible?
docker exec <c> df -h - [ ] Permissions correct?
ls -lain 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 -vUsage
Skill("docker-volumes")Related Skills
- docker-compose-setup
- docker-production
# docker-volumes Configuration
# Category: containers
# Generated: 2025-12-30
skill:
name: docker-volumes
version: "1.0.0"
category: containers
settings:
# Default settings for docker-volumes
enabled: true
log_level: info
# Category-specific defaults
validation:
strict_mode: false
auto_fix: false
output:
format: markdown
include_examples: true
# Environment-specific overrides
environments:
development:
log_level: debug
validation:
strict_mode: false
production:
log_level: warn
validation:
strict_mode: true
# Integration settings
integrations:
# Enable/disable integrations
git: true
linter: true
formatter: true
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "docker-volumes Configuration Schema",
"type": "object",
"properties": {
"skill": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"version": {
"type": "string",
"pattern": "^\\d+\\.\\d+\\.\\d+$"
},
"category": {
"type": "string",
"enum": [
"api",
"testing",
"devops",
"security",
"database",
"frontend",
"algorithms",
"machine-learning",
"cloud",
"containers",
"general"
]
}
},
"required": [
"name",
"version"
]
},
"settings": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean",
"default": true
},
"log_level": {
"type": "string",
"enum": [
"debug",
"info",
"warn",
"error"
]
}
}
}
},
"required": [
"skill"
]
}# Docker Volume Configuration Reference
volume_types:
named_volume:
description: Docker-managed volume
command: "docker volume create myvolume"
usage: "-v myvolume:/data"
bind_mount:
description: Host directory mount
command: "docker run -v /host/path:/container/path"
usage: Good for development
tmpfs:
description: In-memory filesystem
command: "docker run --tmpfs /tmp"
usage: Temporary data, secrets
backup_script: |
docker run --rm \
-v myvolume:/data \
-v $(pwd):/backup \
alpine tar cvf /backup/backup.tar /data
Docker Volumes Guide
Overview
This guide provides comprehensive documentation for the docker-volumes skill in the custom-plugin-docker plugin.
Category: Containers
Quick Start
Prerequisites
- Familiarity with containers concepts
- Development environment set up
- Plugin installed and configured
Basic Usage
# Invoke the skill
claude "docker-volumes - [your task description]"
# Example
claude "docker-volumes - analyze the current implementation"Core Concepts
Key Principles
1. Consistency - Follow established patterns 2. Clarity - Write readable, maintainable code 3. Quality - Validate before deployment
Best Practices
- Always validate input data
- Handle edge cases explicitly
- Document your decisions
- Write tests for critical paths
Common Tasks
Task 1: Basic Implementation
# Example implementation pattern
def implement_docker_volumes(input_data):
"""
Implement docker-volumes functionality.
Args:
input_data: Input to process
Returns:
Processed result
"""
# Validate input
if not input_data:
raise ValueError("Input required")
# Process
result = process(input_data)
# Return
return resultTask 2: Advanced Usage
For advanced scenarios, consider:
- Configuration customization via
assets/config.yaml - Validation using
scripts/validate.py - Integration with other skills
Troubleshooting
Common Issues
| Issue | Cause | Solution |
|---|---|---|
| Skill not found | Not installed | Run plugin sync |
| Validation fails | Invalid config | Check config.yaml |
| Unexpected output | Missing context | Provide more details |
Related Resources
- SKILL.md - Skill specification
- config.yaml - Configuration options
- validate.py - Validation script
---
Last updated: 2025-12-30
Docker Volumes Patterns
Design Patterns
Pattern 1: Input Validation
Always validate input before processing:
def validate_input(data):
if data is None:
raise ValueError("Data cannot be None")
if not isinstance(data, dict):
raise TypeError("Data must be a dictionary")
return TruePattern 2: Error Handling
Use consistent error handling:
try:
result = risky_operation()
except SpecificError as e:
logger.error(f"Operation failed: {e}")
handle_error(e)
except Exception as e:
logger.exception("Unexpected error")
raisePattern 3: Configuration Loading
Load and validate configuration:
import yaml
def load_config(config_path):
with open(config_path) as f:
config = yaml.safe_load(f)
validate_config(config)
return configAnti-Patterns to Avoid
❌ Don't: Swallow Exceptions
# BAD
try:
do_something()
except:
pass✅ Do: Handle Explicitly
# GOOD
try:
do_something()
except SpecificError as e:
logger.warning(f"Expected error: {e}")
return default_valueCategory-Specific Patterns: Containers
Recommended Approach
1. Start with the simplest implementation 2. Add complexity only when needed 3. Test each addition 4. Document decisions
Common Integration Points
- Configuration:
assets/config.yaml - Validation:
scripts/validate.py - Documentation:
references/GUIDE.md
---
Pattern library for docker-volumes skill
#!/usr/bin/env python3
"""
Validation script for docker-volumes skill.
Category: containers
"""
import os
import sys
import yaml
import json
from pathlib import Path
def validate_config(config_path: str) -> dict:
"""
Validate skill configuration file.
Args:
config_path: Path to config.yaml
Returns:
dict: Validation result with 'valid' and 'errors' keys
"""
errors = []
if not os.path.exists(config_path):
return {"valid": False, "errors": ["Config file not found"]}
try:
with open(config_path, 'r') as f:
config = yaml.safe_load(f)
except yaml.YAMLError as e:
return {"valid": False, "errors": [f"YAML parse error: {e}"]}
# Validate required fields
if 'skill' not in config:
errors.append("Missing 'skill' section")
else:
if 'name' not in config['skill']:
errors.append("Missing skill.name")
if 'version' not in config['skill']:
errors.append("Missing skill.version")
# Validate settings
if 'settings' in config:
settings = config['settings']
if 'log_level' in settings:
valid_levels = ['debug', 'info', 'warn', 'error']
if settings['log_level'] not in valid_levels:
errors.append(f"Invalid log_level: {settings['log_level']}")
return {
"valid": len(errors) == 0,
"errors": errors,
"config": config if not errors else None
}
def validate_skill_structure(skill_path: str) -> dict:
"""
Validate skill directory structure.
Args:
skill_path: Path to skill directory
Returns:
dict: Structure validation result
"""
required_dirs = ['assets', 'scripts', 'references']
required_files = ['SKILL.md']
errors = []
# Check required files
for file in required_files:
if not os.path.exists(os.path.join(skill_path, file)):
errors.append(f"Missing required file: {file}")
# Check required directories
for dir in required_dirs:
dir_path = os.path.join(skill_path, dir)
if not os.path.isdir(dir_path):
errors.append(f"Missing required directory: {dir}/")
else:
# Check for real content (not just .gitkeep)
files = [f for f in os.listdir(dir_path) if f != '.gitkeep']
if not files:
errors.append(f"Directory {dir}/ has no real content")
return {
"valid": len(errors) == 0,
"errors": errors,
"skill_name": os.path.basename(skill_path)
}
def main():
"""Main validation entry point."""
skill_path = Path(__file__).parent.parent
print(f"Validating docker-volumes skill...")
print(f"Path: {skill_path}")
# Validate structure
structure_result = validate_skill_structure(str(skill_path))
print(f"\nStructure validation: {'PASS' if structure_result['valid'] else 'FAIL'}")
if structure_result['errors']:
for error in structure_result['errors']:
print(f" - {error}")
# Validate config
config_path = skill_path / 'assets' / 'config.yaml'
if config_path.exists():
config_result = validate_config(str(config_path))
print(f"\nConfig validation: {'PASS' if config_result['valid'] else 'FAIL'}")
if config_result['errors']:
for error in config_result['errors']:
print(f" - {error}")
else:
print("\nConfig validation: SKIPPED (no config.yaml)")
# Summary
all_valid = structure_result['valid']
print(f"\n==================================================")
print(f"Overall: {'VALID' if all_valid else 'INVALID'}")
return 0 if all_valid else 1
if __name__ == "__main__":
sys.exit(main())
Related skills
How it compares
Structured plugin config skill—not a replacement for official Docker CLI reference or a full Compose generator.
FAQ
Who is docker-volumes for?
Developers and small teams wiring custom Docker marketplace plugins who need consistent volume-related defaults for coding agents.
When should I use docker-volumes?
In Operate when tuning infra for persisted container data, and in Ship launch prep when aligning strict validation before production deploys.
Is docker-volumes safe to install?
Check the Security Audits panel on this Prism page; the skill enables filesystem and git integrations in config—scope agent permissions to your repo only.