Skip to main content

Docker Compose Cheatsheet

By Dejan Panovski Updated on Download PDF

Docker Compose quick reference: lifecycle commands, Compose file directives, health checks, environment variables, profiles, scaling, and cleanup.

Docker Compose defines and runs multi-container applications from a single YAML file. This cheatsheet covers current docker compose commands for starting, inspecting, and cleaning up services, plus common Compose file directives; it does not cover the legacy docker-compose v1 binary.

Start & Stop

Bring services up and take them down.

CommandDescription
docker compose upCreate and start all services
docker compose up -dStart in background (detached)
docker compose up -d --buildRebuild images before starting
docker compose up -d serviceStart one service and its dependencies
docker compose up --waitDetach and wait until services are running or healthy
docker compose stopStop services without removing them
docker compose startStart stopped services
docker compose restartRestart all services
docker compose downStop and remove containers and networks
docker compose down -vAlso remove project-owned named and anonymous volumes

Inspect & Logs

Check service status and output.

CommandDescription
docker compose psList running project containers
docker compose ps -aList all project containers, including stopped
docker compose logsShow logs for all services
docker compose logs -f serviceFollow logs for one service
docker compose logs --tail 100 serviceShow last 100 log lines
docker compose topRunning processes per service
docker compose eventsStream container events
docker compose port service 80Host port mapped to container port 80
docker compose lsList running Compose projects

Exec & Run

Run commands inside service containers.

CommandDescription
docker compose exec service shOpen shell in a running service
docker compose exec service commandRun command in a running service
docker compose exec -u root service shShell as a specific user
docker compose run --rm service commandRun a one-off container
docker compose run --rm --no-deps service shOne-off without starting dependencies
docker compose cp service:/path ./localCopy from a service container
docker compose cp ./local service:/pathCopy into a service container
docker compose attach serviceAttach to a service’s output

Build & Images

Build, pull, and push service images.

CommandDescription
docker compose buildBuild all service images
docker compose build serviceBuild one service image
docker compose build --no-cacheBuild without layer cache
docker compose pullPull service images
docker compose pushPush service images to a registry
docker compose imagesList images used by services
docker compose createCreate containers without starting them
docker compose watchSync files and rebuild on changes

Compose File Basics

Core service directives in docker-compose.yml .

DirectiveDescription
services:Top-level map of containers to run
image: postgres:16Run an existing image
build: .Build from a Dockerfile in a path
command: ["npm", "run", "dev"]Override the image default command
entrypoint: ["/entrypoint.sh"]Override the image entrypoint
ports: ["8080:80"]Publish host port 8080 to container port 80
volumes: ["db_data:/var/lib/postgresql/data"]Mount a named volume
environment: ["DEBUG=1"]Set environment variables
env_file: .env.localLoad variables from a file
container_name: myappFixed container name (prevents scaling)

Health & Startup Order

Control dependency order and restart behavior.

DirectiveDescription
depends_on: [db]Start db before this service
depends_on: {db: {condition: service_healthy}}Wait until db passes its health check
healthcheck: {test: ["CMD", "pg_isready"]}Define a health probe
interval, timeout, retries, start_periodHealth check timing fields
restart: "no"Never restart (default)
restart: alwaysAlways restart
restart: on-failureRestart on non-zero exit
restart: unless-stoppedRestart unless manually stopped

Environment Variables

Pass configuration into services. Keep .env files out of version control; use Compose secrets for sensitive data.

SyntaxDescription
environment: ["API_KEY=${API_KEY}"]Interpolate from the shell or .env
${VAR:-default}Use default when VAR is unset or empty
${VAR:?message}Fail with message when VAR is unset or empty
env_file: .env.localLoad variables from a specific file
.envLoaded automatically from the project directory
docker compose --env-file .env.prod up -dUse an alternate env file
docker compose configRender final config with variables resolved

Projects & Files

Compose looks for compose.yaml first; docker-compose.yml is still supported.

SyntaxDescription
docker compose -f compose.prod.yaml up -dUse a specific file
docker compose -f base.yml -f override.yml up -dMerge files; later files can add, merge, or override values
docker compose -p myproject up -dSet the project name
COMPOSE_FILE=base.yml:override.ymlDefault files via environment variable
COMPOSE_PROJECT_NAME=myprojectDefault project name
docker compose configValidate and print the merged config
docker compose config --servicesList service names
docker compose versionShow Compose version

Profiles & Scaling

Run optional services and multiple replicas.

SyntaxDescription
profiles: ["debug"]Assign a service to a profile
docker compose --profile debug up -dStart with a profile enabled
COMPOSE_PROFILES=debug,testEnable profiles via environment variable
docker compose up -d --scale worker=3Run 3 replicas of a service
docker compose up -d --no-deps serviceStart or update one service without its dependencies
docker compose up -d --force-recreateRecreate containers even without changes

Cleanup

Remove what a project created.

CommandDescription
docker compose downRemove containers and networks
docker compose down -vAlso remove project-owned named and anonymous volumes
docker compose down --rmi allAlso remove images
docker compose down --remove-orphansRemove containers for removed services
docker compose rmRemove stopped service containers
docker compose stop serviceStop a single service