Compose Commands
All docker compose commands for managing multi-container applications throughout their lifecycle.
Stack Lifecycle
Starting
# Start all services in background
docker compose up -d
# Start specific services only
docker compose up -d api db
# Start with forced image rebuild
docker compose up -d --build
# Start with forced container recreation
docker compose up -d --force-recreate
# Start without recreating dependencies
docker compose up -d --no-deps api
Stopping
# Stop and remove containers, networks
docker compose down
# Stop, remove containers, AND delete volumes (DANGEROUS)
docker compose down -v
# Stop, remove containers, AND delete images
docker compose down --rmi all
# Stop, remove containers, AND remove orphans
docker compose down --remove-orphans
# Stop containers without removing them
docker compose stop
# Stop a specific service
docker compose stop api
Restarting
# Restart all services
docker compose restart
# Restart a specific service
docker compose restart api
# Restart with timeout
docker compose restart -t 30 api
Inspecting State
Service Status
# List all services and their status
docker compose ps
# Show all services (including stopped)
docker compose ps -a
# Custom format
docker compose ps --format 'table {{.Name}}\t{{.Status}}\t{{.Ports}}'
Logs
# Follow all service logs
docker compose logs -f
# Follow one service
docker compose logs -f api
# Last 100 lines for all services
docker compose logs --tail=100
# Last 100 lines for specific service
docker compose logs --tail=100 api
# Logs with timestamps
docker compose logs --timestamps api
# Logs since a time
docker compose logs --since=15m api
# No color (useful for piping to file)
docker compose logs --no-color > stack.log
Configuration
# Validate and render the merged Compose config
docker compose config
# Show only service names
docker compose config --services
# Show only volume names
docker compose config --volumes
# Show config with specific override files
docker compose -f compose.yaml -f compose.prod.yaml config
Images
# Pull latest images for all services
docker compose pull
# Pull for a specific service
docker compose pull api
# Build images defined in Compose
docker compose build
# Build without cache
docker compose build --no-cache
# Build a specific service
docker compose build api
# List images used by the stack
docker compose images
Executing Commands
# Shell into a running service
docker compose exec api sh
docker compose exec api bash
# Run a one-off command
docker compose exec db psql -U postgres
# Run as root (even if service uses non-root user)
docker compose exec -u root api sh
# Run without TTY allocation (for scripts)
docker compose exec -T api cat /app/config.json
exec vs run
# exec: runs inside an EXISTING running container
docker compose exec api npm test
# run: creates a NEW temporary container from the service definition
docker compose run --rm api npm test
exec | run | |
|---|---|---|
| Container | Uses existing running container | Creates a new container |
| State | Shares state with running service | Clean, isolated environment |
| Use case | Debug a running service | Run one-off commands, migrations |
| Ports | Shares published ports | Does NOT publish ports by default |
Multi-File and Environment Workflows
Override Files
# Use specific override files
docker compose -f compose.yaml -f compose.prod.yaml up -d
# Validate merged config before deploying
docker compose -f compose.yaml -f compose.prod.yaml config
# Pull with override files
docker compose -f compose.yaml -f compose.prod.yaml pull
Environment Variables
# Use a specific .env file
docker compose --env-file .env.prod up -d
# Set project name (prefixes container names)
docker compose -p myproject up -d
# Set project directory
docker compose --project-directory /opt/app up -d
Production Deployment Workflow
A complete production deployment sequence:
# 1. Validate configuration
docker compose -f compose.yaml -f compose.prod.yaml config
# 2. Pull latest images
docker compose -f compose.yaml -f compose.prod.yaml pull
# 3. Deploy (only recreates changed services)
docker compose -f compose.yaml -f compose.prod.yaml up -d
# 4. Verify all services are healthy
docker compose -f compose.yaml -f compose.prod.yaml ps
# 5. Check logs for errors
docker compose -f compose.yaml -f compose.prod.yaml logs --tail=100
# 6. Clean up old images
docker image prune -f
Scaling Services
# Scale a service to 3 instances
docker compose up -d --scale api=3
# Check scaled instances
docker compose ps
Port Conflicts
When scaling, do not define fixed host port mappings (e.g., 8080:8080). Use a range (8080-8082:8080) or a reverse proxy.
Resource and Process Info
# Show resource usage for stack services
docker compose top
# Show container-level processes
docker compose top api
Compose Quick Reference
| Goal | Command |
|---|---|
| Start stack | docker compose up -d |
| Start with rebuild | docker compose up -d --build |
| Start with forced recreate | docker compose up -d --force-recreate |
| Stop and remove | docker compose down |
| Stop, remove, and delete volumes | docker compose down -v |
| Stop without removing | docker compose stop |
| Restart service | docker compose restart SERVICE |
| List services | docker compose ps |
| Follow all logs | docker compose logs -f |
| Follow service logs | docker compose logs -f SERVICE |
| Tail logs | docker compose logs --tail=100 |
| Validate config | docker compose config |
| Pull images | docker compose pull |
| Build images | docker compose build |
| Shell into service | docker compose exec SERVICE sh |
| Run one-off command | docker compose run --rm SERVICE CMD |
| Use override file | docker compose -f compose.yaml -f FILE up -d |
| Use custom .env | docker compose --env-file FILE up -d |
| Scale a service | docker compose up -d --scale SERVICE=N |
| Remove orphans | docker compose down --remove-orphans |
| List images used | docker compose images |
| Show processes | docker compose top |
What's Next
- Return to the Cheatsheet and Reference overview.