Field explanations
- Top-level settings define the tool behavior
- Environment-specific blocks override defaults
- Paths are usually relative to the config file or project root
- Secrets should be referenced, not committed
Minimal template
services:
app:
image: nginx:alpine
ports:
- "8080:80"Common usage patterns
- Keep docker-compose.yml small and reviewable
- Use comments only when the format supports them
- Commit example files with placeholder values
- Validate locally before deploying
Common errors
- Tabs or invalid YAML
- Port already allocated
- Volume hides built files
- depends_on without healthcheck
Online validation
Validate syntax first, then compare behavior against your deploy target. For JSON-based configs, use the JSON formatter before debugging tool-specific behavior.