Claude Code Plugins

Community-maintained marketplace

Feedback

docker-local-database

@mwguerra/claude-code-plugins
3
0

Database operations with docker-local - create, connect, backup, restore for MySQL and PostgreSQL

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name docker-local-database
description Database operations with docker-local - create, connect, backup, restore for MySQL and PostgreSQL

Docker-Local Database Skill

Overview

This skill manages database operations in docker-local:

  • Create databases
  • Connect to database CLIs
  • Backup and restore
  • Run migrations
  • Manage Redis

Available Database Services

Service Version Port Use Case
MySQL 9.1 3306 Traditional relational database
PostgreSQL 17 5432 Advanced features, pgvector for AI
Redis 8 6379 Cache, sessions, queues

MANDATORY: Prerequisite Check

Before ANY docker-local command, verify installation:

which docker-local > /dev/null 2>&1

If docker-local is NOT found:

  1. Stop and ask the user if they want to install it
  2. If yes, install via: composer global require mwguerra/docker-local
  3. Add to PATH: export PATH="$HOME/.composer/vendor/bin:$PATH"
  4. Initialize: docker-local init
  5. Verify: which docker-local && docker-local --version

Database Commands

Connect to Database CLIs

# MySQL CLI
docker-local db:mysql

# PostgreSQL CLI
docker-local db:postgres

# Redis CLI
docker-local db:redis

Create Database

# Create MySQL database
docker-local db:create myapp

# Creates:
# - myapp (main database)
# - myapp_testing (for tests)

Backup Database

# Dump current project database
docker-local db:dump

# Dump specific database
docker-local db:dump myapp

# Output goes to: myapp_YYYY-MM-DD_HH-MM-SS.sql

Manual backup commands:

# MySQL
docker exec mysql mysqldump -u laravel -psecret myapp > backup.sql

# PostgreSQL
docker exec postgres pg_dump -U laravel myapp > backup.sql

Restore Database

# Restore from SQL file
docker-local db:restore backup.sql

# Restore to specific database
docker-local db:restore backup.sql myapp

Manual restore commands:

# MySQL
docker exec -i mysql mysql -u laravel -psecret myapp < backup.sql

# PostgreSQL
docker exec -i postgres psql -U laravel myapp < backup.sql

Run Migrations

# Fresh migration with seeds
docker-local db:fresh

# Regular migration
docker-local tinker <<< "Artisan::call('migrate')"

# Or via artisan
docker exec -w /var/www/myapp php php artisan migrate

Default Credentials

MySQL

Host:     mysql (inside Docker) / localhost (from host)
Port:     3306
User:     laravel (or root)
Password: secret

PostgreSQL

Host:     postgres (inside Docker) / localhost (from host)
Port:     5432
User:     laravel
Password: secret

Redis

Host:     redis (inside Docker) / localhost (from host)
Port:     6379
Password: (none)

Connecting from Host Machine

For GUI tools like TablePlus, DBeaver, or DataGrip:

MySQL Connection

Host:     localhost (or 127.0.0.1)
Port:     3306
User:     laravel (or root)
Password: secret
Database: myapp

PostgreSQL Connection

Host:     localhost (or 127.0.0.1)
Port:     5432
User:     laravel
Password: secret
Database: myapp

Connecting from Inside Container

Laravel .env should use Docker service names:

# MySQL
DB_HOST=mysql
DB_PORT=3306

# PostgreSQL
DB_HOST=postgres
DB_PORT=5432

# Redis
REDIS_HOST=redis
REDIS_PORT=6379

Important: Use service names (mysql, postgres, redis), NOT localhost!

PostgreSQL with pgvector

PostgreSQL 17 includes pgvector for AI embeddings:

-- Extension is pre-installed
-- Just use it in your tables:
CREATE TABLE items (
  id SERIAL PRIMARY KEY,
  embedding vector(1536)
);

-- Similarity search
SELECT * FROM items ORDER BY embedding <-> '[...]' LIMIT 10;

Redis Database Allocation

Redis has 16 databases (0-15). Docker-local allocates 3 per project:

Project Cache DB Session DB Queue DB
1st project 0 1 2
2nd project 3 4 5
3rd project 6 7 8
4th project 9 10 11
5th project 12 13 14

Check Redis usage:

# Connect to Redis
docker-local db:redis

# List all keys in current DB
KEYS *

# Switch databases
SELECT 0
SELECT 3

# Count keys per database
INFO keyspace

Database Troubleshooting

Cannot Connect to Database

# Check if container is running
docker-local status

# Check database logs
docker-local logs mysql
docker-local logs postgres

# Test connection
docker exec mysql mysqladmin ping -h localhost -u root -psecret
docker exec postgres pg_isready -U laravel

Permission Denied

# MySQL - grant privileges
docker exec mysql mysql -u root -psecret -e "GRANT ALL ON myapp.* TO 'laravel'@'%';"

# PostgreSQL - check ownership
docker exec postgres psql -U laravel -c "\l"

Database Not Found

# List existing databases
# MySQL
docker exec mysql mysql -u root -psecret -e "SHOW DATABASES;"

# PostgreSQL
docker exec postgres psql -U laravel -c "\l"

# Create missing database
docker-local db:create myapp

Reset Database

# Drop and recreate
# MySQL
docker exec mysql mysql -u root -psecret -e "DROP DATABASE myapp; CREATE DATABASE myapp;"

# PostgreSQL
docker exec postgres psql -U laravel -c "DROP DATABASE myapp; CREATE DATABASE myapp;"

# Then migrate
docker-local db:fresh

Useful SQL Commands

MySQL

-- Show databases
SHOW DATABASES;

-- Show tables
USE myapp;
SHOW TABLES;

-- Show table structure
DESCRIBE users;

-- Export specific table
docker exec mysql mysqldump -u laravel -psecret myapp users > users.sql

PostgreSQL

-- List databases
\l

-- Connect to database
\c myapp

-- List tables
\dt

-- Describe table
\d users

-- Show running queries
SELECT * FROM pg_stat_activity;

Redis

# List all keys
KEYS *

# Get key type
TYPE mykey

# Get string value
GET mykey

# Get hash
HGETALL myhash

# Clear current database
FLUSHDB

# Clear all databases (careful!)
FLUSHALL

# Monitor commands in real-time
MONITOR

$ARGUMENTS