Skip to main content

Container Ops Commands

Commands for the entire container lifecycle: starting, stopping, debugging, inspecting, and cleaning up containers.

Running Containers

Common Patterns

# Detached service with port mapping
docker run -d --name api -p 8080:8080 my-api:1.0.0

# Interactive debug session (auto-removes on exit)
docker run --rm -it alpine:3.20 sh

# With environment variables
docker run -d --name app -e APP_ENV=prod -e LOG_LEVEL=info my-app:1.0.0

# With volume mount
docker run -d --name db -v db_data:/var/lib/postgresql/data postgres:16

# With resource limits
docker run -d --name api --memory=512m --cpus=1.0 my-api:1.0.0

# With restart policy
docker run -d --name api --restart unless-stopped my-api:1.0.0

# With custom network
docker run -d --name api --network app-net my-api:1.0.0

docker run Flag Reference

FlagExamplePurpose
-d-dRun in background (detached)
-it-itInteractive with TTY (for shell access)
--rm--rmAuto-remove container on exit
--name--name apiAssign a container name
-p-p 8080:80Publish port (host:container)
-e-e KEY=VALSet environment variable
-v-v vol:/pathMount a volume
--network--network app-netAttach to a specific network
--memory--memory=512mLimit memory
--cpus--cpus=1.5Limit CPU cores
--restart--restart unless-stoppedRestart policy
--user--user 1000:1000Run as specific UID:GID
--read-only--read-onlyRead-only root filesystem
--cap-drop--cap-drop ALLDrop Linux capabilities
--env-file--env-file .envLoad env vars from file
-w-w /appSet working directory
--entrypoint--entrypoint shOverride entrypoint

Listing Containers

# Running containers only
docker ps

# All containers (including stopped)
docker ps -a

# Custom format
docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Image}}\t{{.Ports}}'

# Show container sizes
docker ps -s

# Filter by status
docker ps -f status=exited
docker ps -f status=running

# Filter by name
docker ps -f name=api

# Only container IDs
docker ps -q

Logs

# View all logs
docker logs my-app

# Last 100 lines
docker logs --tail=100 my-app

# Follow logs in real-time
docker logs -f my-app

# Follow with last 50 lines
docker logs -f --tail=50 my-app

# Logs from last 15 minutes
docker logs --since=15m my-app

# Logs with timestamps
docker logs --timestamps my-app

# Logs between two times
docker logs --since 2024-01-01T00:00:00 --until 2024-01-01T01:00:00 my-app

Executing Commands Inside Containers

# Open interactive shell
docker exec -it my-app sh
docker exec -it my-app bash # If bash is available

# Run a single command
docker exec my-app ls -la /app

# Check environment variables
docker exec my-app env

# Check running processes
docker exec my-app ps aux

# Test network connectivity
docker exec my-app ping -c 3 db
docker exec my-app nslookup api

# Run as root (even if container uses non-root user)
docker exec -u root -it my-app sh

Stopping and Removing

# Graceful stop (SIGTERM, wait 10s, then SIGKILL)
docker stop my-app

# Graceful stop with custom timeout
docker stop -t 30 my-app

# Force kill immediately
docker kill my-app

# Remove a stopped container
docker rm my-app

# Force remove a running container
docker rm -f my-app

# Remove all stopped containers
docker container prune

# Stop and remove in one line
docker stop my-app && docker rm my-app

Inspecting Container State

General Inspection

# Full JSON metadata
docker inspect my-app

# Container status
docker inspect my-app --format '{{.State.Status}}'

# Container IP address
docker inspect my-app --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'

Health and Restarts

# Health check status
docker inspect my-app --format '{{json .State.Health}}'

# Restart count (high count = crash loop)
docker inspect my-app --format '{{.RestartCount}}'

# Exit code (0 = clean, non-zero = error)
docker inspect my-app --format '{{.State.ExitCode}}'

# OOM killed check
docker inspect my-app --format '{{.State.OOMKilled}}'

# Error message
docker inspect my-app --format '{{.State.Error}}'

Configuration

# Environment variables
docker inspect my-app --format '{{json .Config.Env}}'

# Mounts
docker inspect my-app --format '{{json .Mounts}}'

# Network settings
docker inspect my-app --format '{{json .NetworkSettings.Networks}}'

# Port mappings
docker inspect my-app --format '{{json .NetworkSettings.Ports}}'

# User
docker inspect my-app --format '{{.Config.User}}'

# Capabilities
docker inspect my-app --format '{{json .HostConfig.CapDrop}}'

Resource Monitoring

# Live resource usage for all containers
docker stats

# One-shot (no streaming)
docker stats --no-stream

# Specific containers
docker stats my-app db redis

# Custom format
docker stats --format 'table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}'

# Show processes inside a container
docker top my-app

Copying Files

# Copy file from container to host
docker cp my-app:/app/config.json ./config.json

# Copy file from host to container
docker cp ./config.json my-app:/app/config.json

# Copy entire directory
docker cp my-app:/app/logs ./logs

Container Filesystem Changes

# Show what files changed inside the container
docker diff my-app
# A = added, C = changed, D = deleted

Pausing and Unpausing

# Freeze all processes in a container (SIGSTOP)
docker pause my-app

# Resume frozen container
docker unpause my-app

Useful for taking consistent backups or debugging.

Creating Containers Without Starting

# Create but don't start
docker create --name my-app -p 8080:80 nginx:alpine

# Start it later
docker start my-app

Container Quick Reference

GoalCommand
Run in backgrounddocker run -d --name NAME IMAGE
Run interactive shelldocker run --rm -it IMAGE sh
List runningdocker ps
List alldocker ps -a
View logsdocker logs --tail=100 CONTAINER
Follow logsdocker logs -f CONTAINER
Shell into containerdocker exec -it CONTAINER sh
Run command insidedocker exec CONTAINER CMD
Inspect statedocker inspect CONTAINER
Check healthdocker inspect CONTAINER --format '{{json .State.Health}}'
Check restartsdocker inspect CONTAINER --format '{{.RestartCount}}'
Check exit codedocker inspect CONTAINER --format '{{.State.ExitCode}}'
OOM checkdocker inspect CONTAINER --format '{{.State.OOMKilled}}'
Resource usagedocker stats
Stop gracefullydocker stop CONTAINER
Force killdocker kill CONTAINER
Removedocker rm CONTAINER
Copy file outdocker cp CONTAINER:SRC DEST
Copy file indocker cp SRC CONTAINER:DEST
Filesystem changesdocker diff CONTAINER
Pause/unpausedocker pause CONTAINER / docker unpause CONTAINER
Clean up stoppeddocker container prune

What's Next