docker run patterns

Start a container with port mapping

docker run -d --name web -p 8080:80 nginx

Example:

docker run --rm -it node:20 bash

Pass env vars and volumes

docker run -e NODE_ENV=dev -v $(pwd):/app node:20 npm test

Example:

docker run --network app-net redis

docker compose patterns

Start full stack from compose file

docker compose up -d

Example:

docker compose down

Run one-off task in service

docker compose run --rm app npm run migrate

Example:

docker compose logs -f app

Decision checklist

Inspect resulting containers

docker ps

Example:

docker compose ps

Validate compose config

docker compose config

Example:

docker compose config --services

Common mistakes / Pitfalls

  • Using docker run repeatedly for multi-service apps creates drift and manual errors.
  • Forgetting --rm on one-off run containers leaves clutter behind.
  • Mixing compose project names can start duplicate networks and volumes.
Last updated: February 2026