From docker-specialist
Diagnoses Docker container failures, networking issues, permissions errors, port conflicts, data persistence problems, and health checks using docker compose logs, inspect, and targeted fixes.
npx claudepluginhub mwguerra/claude-code-plugins --plugin docker-specialistThis skill uses the workspace's default tool permissions.
This skill helps diagnose and resolve common Docker issues:
Debugs Docker containers and containerized apps: check status, logs, exec shells, inspect resources, processes. Diagnoses startup failures, crashes, resource limits, networking, performance issues.
Provides solutions for common Docker build and runtime errors in PHP containers (e.g., OOM, permission denied, PHP-FPM crashes) plus diagnostic bash commands for logs, inspection, and stats.
Guides Docker containers, images, Compose orchestration, networking, volumes, debugging, production hardening, and commands for stable environments. Use for Dockerfiles, builds, runtime, logs, ports, security.
Share bugs, ideas, or general feedback.
This skill helps diagnose and resolve common Docker issues:
Read relevant documentation:
17-troubleshooting.md for common issues15-port-conflicts.md for port problems16-restart-strategies.md for restart issuesGather information:
# Check container status
docker compose ps -a
# View logs
docker compose logs servicename
# Check configuration
docker compose config
# Inspect container
docker inspect containername
Diagnosis:
docker compose logs servicename
docker inspect --format='{{.State.ExitCode}}' containername
Solutions:
Diagnosis:
lsof -i :3000
# or
netstat -tulpn | grep 3000
Solutions:
# Kill process
kill $(lsof -t -i:3000)
# Or change port in compose
ports:
- "3001:3000"
Diagnosis:
docker compose exec app ls -la /app/data
Solutions:
# Fix in compose
services:
app:
user: "1000:1000"
# Or fix in container
docker compose exec -u root app chown -R appuser:appgroup /app/data
Diagnosis:
docker volume ls
docker compose config | grep -A5 "volumes:"
Solutions:
# Use named volumes instead of anonymous
volumes:
- postgres_data:/var/lib/postgresql/data # Named (persists)
# NOT: - /var/lib/postgresql/data # Anonymous (deleted)
Diagnosis:
docker network inspect networkname
docker compose exec app ping db
docker compose exec app nslookup db
Solutions:
# Ensure same network
services:
app:
networks:
- backend
db:
networks:
- backend
networks:
backend:
Diagnosis:
docker inspect --format='{{json .State.Health}}' containername | jq
Solutions:
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s # Give time to start
Diagnosis:
docker system df
docker system df -v
Solutions:
# Clean unused resources
docker system prune -a --volumes
Solutions:
docker compose build --no-cache
docker builder prune -a
# Shell into running container
docker compose exec app sh
# Shell into failed container
docker compose run --entrypoint sh app
# View resource usage
docker stats
# View container processes
docker compose top
# View real-time events
docker events
# Copy files from container
docker compose cp app:/app/logs ./logs
docker compose psdocker compose logs servicenamedocker network lsdocker volume lsdocker statsdocker compose configdocker system df| Error | Cause | Solution |
|---|---|---|
| "port is already allocated" | Port in use | Kill process or change port |
| "network not found" | Missing network | Create network or check name |
| "volume not found" | Missing volume | Create volume or check name |
| "no such service" | Service name typo | Check compose.yaml |
| "unauthorized" | Auth issue | docker login |
| "image not found" | Missing image | docker compose pull |
| "permission denied" | File permissions | Fix ownership/permissions |
| "out of memory" | Memory limit | Increase limit or optimize app |