# Docker Compose Helper

> Use when the user asks to create, debug, or modify Docker Compose files, compose.yaml, docker-compose.yml, service dependencies, healthchecks, ports, volumes, networks, environment variables, or local multi-container development stacks. Use this skill even if the user says "compose file" or "local stack" instead of "Docker Compose".

- Skill: `antongulin/docker-compose-helper` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add antongulin/docker-compose-helper`
- Raw SKILL.md: https://api.skillmd.com/api/skills/antongulin/docker-compose-helper/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: DevOps & Infra
- Author: antongulin (https://skillmd.com/u/antongulin)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/antongulin/docker-compose-helper

---


# Docker Compose Helper

Help users create, review, and repair Docker Compose setups with the smallest
working change that fits their local development workflow.

## Workflow

1. Identify the user's goal:
   - creating a new compose file
   - adding or changing a service
   - debugging startup, networking, volume, or environment issues
   - translating a `docker run` command into compose
2. Inspect existing files before editing:
   - `compose.yaml`
   - `compose.yml`
   - `docker-compose.yaml`
   - `docker-compose.yml`
   - `.env`
   - Dockerfiles referenced by `build`
3. Prefer Docker Compose v2 syntax:
   - omit the obsolete top-level `version`
   - use `compose.yaml` if creating a new file
   - keep service names lowercase and stable
4. Make the smallest useful change. Do not add orchestration, custom networks,
   or named volumes unless the service needs them.

## Compose Defaults

- Use explicit image tags instead of `latest` when a stable tag is obvious.
- Use named volumes for database state.
- Use bind mounts for application source during local development.
- Put secrets and machine-specific values in `.env`, not directly in YAML.
- Add `depends_on` only for startup ordering; add `healthcheck` when readiness
  actually matters.
- Expose only the host ports the user needs.

## Debugging Checklist

When debugging, check these in order:

1. YAML validity and indentation.
2. Whether the service name, image, build context, and Dockerfile path exist.
3. Port conflicts between host ports and already-running services.
4. Volume paths and whether a bind mount hides files built into the image.
5. Environment variable names, `.env` loading, and missing required values.
6. Container-to-container networking: services should use service names as DNS
   hosts, not `localhost`.
7. Readiness problems: add a healthcheck and condition only when the dependent
   service truly must wait.

## Output

When editing files, show the changed compose snippet or file path and explain
the reason for each non-obvious setting in one short sentence.

