When an incident hits a containerized service, you often don’t need a full observability stack to get traction. You need fast answers: Which container is hot? What resource is saturating? Is it an app problem or a limit problem?
This guide shows a practical monitoring stack you can run from any Docker host:
docker stats streams runtime metrics for containers, including CPU%, memory usage/limit, network I/O, and block I/O.
docker stats
Common workflows:
docker stats --no-stream # Snapshot (good for scripts)
docker stats <container_name> # Focus on one container
How to interpret it (in plain language)
Once you identify a hot container, immediately gather identity + configuration.
docker ps
docker inspect <container> | less
Useful inspect questions:
docker logs --tail 200 <container>
docker logs -f <container>
This is often enough to spot:
Docker relies on Linux kernel features:
Why this matters during incidents:
When docker stats shows a spike, verify on the host to avoid false conclusions.
ps aux --sort=-%cpu | head -15
free -h
df -h
du -sh /var/lib/docker/* 2>/dev/null | sort -h | tail -10
iostat -x 1 3
ss -tuln
These host checks help you decide whether you’re dealing with a single container or a node-wide saturation problem. ​
Use the shortest safe path to stability:
CPU high + latency rising
Memory near limit
Block I/O high
Network I/O abnormal
# 1) Find the hot container
docker stats --no-stream
# 2) Identify it
docker ps
docker inspect <container> | less
# 3) Check symptoms
docker logs --tail 200 <container>
# 4) Confirm on host (avoid guessing)
ps aux --sort=-%cpu | head -10
free -h
df -h
iostat -x 1 3
ss -tuln
Next post: Container Troubleshooting Playbook (common symptoms → commands → safe mitigations → root cause follow-ups).