github-actions
Use this skill when authoring or debugging GitHub Actions workflows (.github/workflows/*.yml) — e.g. "add CI for this Drupal project on GitHub", "run…
Use this skill when authoring or editing Docker Compose files (compose.yaml / docker-compose.yml), running multi-container stacks, or containerizing a Drupal/PHP application — e.g. "set up a local Drupal stack with nginx and MariaDB", "add Redis to my compose file", "why won't
$ npx -y skills add siva01c/claude-plugins --skill docker-compose --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/docker-composeContext preview
The summary Claude sees to decide when to auto-load this skill.
Use this skill when authoring or editing Docker Compose files (compose.yaml / docker-compose.yml), running multi-container stacks, or containerizing a Drupal/PHP application — e.g. "set up a local Drupal stack with nginx and MariaDB", "add Redis to my compose file", "why won't
name: docker-compose description: > Use this skill when authoring or editing Docker Compose files (compose.yaml / docker-compose.yml), running multi-container stacks, or containerizing a Drupal/PHP application — e.g. "set up a local Drupal stack with nginx and MariaDB", "add Redis to my compose file", "why won't my containers start", "split dev and prod compose configuration". Also trigger for compose commands (up, down, logs, exec, watch) and healthcheck/dependency issues between services.
Docker Compose defines and runs multi-container applications from a single `compose.yaml` file. This skill covers authoring the file, operating the stack, and structuring configuration for development vs production, with a typical Drupal stack (php-fpm, nginx, MariaDB, Redis) as the working example.
---
Compose v2; linters flag it.
services:
php:
build:
context: .
dockerfile: docker/php/Dockerfile
volumes:
- ./:/var/www/html
- drupal-files:/var/www/html/web/sites/default/files
environment:
DRUPAL_DB_HOST: db
DRUPAL_DB_NAME: drupal
DRUPAL_DB_USER: drupal
env_file:
- .env
depends_on:
db:
condition: service_healthy
redis:
condition: service_started
web:
image: nginx:1.27-alpine
ports:
- "8080:80"
volumes:
- ./:/var/www/html:ro
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
depends_on:
- php
db:
image: mariadb:11.4
environment:
MARIADB_DATABASE: drupal
MARIADB_USER: drupal
MARIADB_PASSWORD: ${DB_PASSWORD:?set DB_PASSWORD in .env}
MARIADB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD:?set DB_ROOT_PASSWORD in .env}
volumes:
- db-data:/var/lib/mysql
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
interval: 10s
timeout: 5s
retries: 5
redis:
image: redis:7-alpine
volumes:
db-data:
drupal-files:Key points illustrated:
`drush` commands fail if the database container is *running* but not yet *accepting connections*. A healthcheck plus condition fixes the race.
missing instead of starting with empty passwords.
bind-mounted codebase.
---
docker compose up -d # start stack in background docker compose up -d --build # rebuild images first docker compose down # stop and remove containers (volumes kept) docker compose down -v # ALSO delete named volumes (destroys DB!) docker compose ps # container status + health docker compose logs -f php # follow logs of one service docker compose exec php bash # shell into running container docker compose exec php vendor/bin/drush cr # run drush inside the stack docker compose run --rm php composer install # one-off command container docker compose config # render the final merged config (debug) docker compose watch # sync+rebuild on file changes (dev loop)
---
Compose merges multiple files; later files override earlier ones. `compose.override.yaml` is loaded automatically for local development:
compose.yaml # base — shared definition compose.override.yaml # dev only — bind mounts, xdebug, exposed ports compose.prod.yaml # prod — restart policies, no source bind mount
docker compose up -d # base + override (dev) docker compose -f compose.yaml -f compose.prod.yaml up -d # prod set
Use **profiles** for optional services (e.g. Solr or Mailpit only when needed):
services:
solr:
image: solr:9
profiles: ["search"]docker compose --profile search up -d
---
result before anything starts.
---
| Symptom | Fix | |---|---| | Drupal install fails with "connection refused" to DB | Add DB `healthcheck` + `depends_on.condition: service_healthy` | | Changes to compose.yaml have no effect | `docker compose up -d` again (recreates changed services); check `docker compose config` | | Port already allocated | Another stack uses the host port — change `ports:` mapping or `docker compose down` the other project | | Permission errors on `sites/default/files` | Align container user UID with host (`user:` key) or fix volume ownership in entrypoint | | Stale vendor/ after switching branches | `docker compose run --rm php composer install` | | `version` is obsolete warning | Delete the top-level `version:` key | | Database empty after restart | You ran `down -v` — named volumes were deleted; restore from backup |
A curated collection of Claude Code plugins for Drupal development, security, and deployment. Each plugin covers one topic — Drupal itself, DDEV, Docker, CI/CD, git workflows, and security verification — so you install only what you need.
Use this skill when authoring or debugging GitHub Actions workflows (.github/workflows/*.yml) — e.g. "add CI for this Drupal project on GitHub", "run…
Use this skill when authoring or debugging GitLab CI/CD pipelines (.gitlab-ci.yml) — e.g. "add a CI pipeline for this Drupal project", "run…
Use for operational Drupal 11 workflows in DDEV environments, including safe updates, backup-first procedures, and troubleshooting commands.
Use this skill when running local AI models with Docker Model Runner — the `docker model` CLI — e.g. "run an LLM locally with Docker", "pull a model from the…
Use when creating or extending Drupal 11 custom modules, including scaffolding, service architecture, and dependency injection best practices.
Use when auditing Drupal 11 custom modules/themes for security issues such as unsafe input handling, XSS risks, SQL injection, and access control gaps.