Skip to main content

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
execrun
ContainerUses existing running containerCreates a new container
StateShares state with running serviceClean, isolated environment
Use caseDebug a running serviceRun one-off commands, migrations
PortsShares published portsDoes 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

GoalCommand
Start stackdocker compose up -d
Start with rebuilddocker compose up -d --build
Start with forced recreatedocker compose up -d --force-recreate
Stop and removedocker compose down
Stop, remove, and delete volumesdocker compose down -v
Stop without removingdocker compose stop
Restart servicedocker compose restart SERVICE
List servicesdocker compose ps
Follow all logsdocker compose logs -f
Follow service logsdocker compose logs -f SERVICE
Tail logsdocker compose logs --tail=100
Validate configdocker compose config
Pull imagesdocker compose pull
Build imagesdocker compose build
Shell into servicedocker compose exec SERVICE sh
Run one-off commanddocker compose run --rm SERVICE CMD
Use override filedocker compose -f compose.yaml -f FILE up -d
Use custom .envdocker compose --env-file FILE up -d
Scale a servicedocker compose up -d --scale SERVICE=N
Remove orphansdocker compose down --remove-orphans
List images useddocker compose images
Show processesdocker compose top

What's Next