Skip to content
v0.8.0 ·built with Rust

Monitor containers across every host

dtop streams live CPU, memory, network and disk metrics from local, SSH, TCP and TLS Docker daemons into a single table in your terminal.

brew install dtop
dtop 8 containers
all local deploy@edge-01 ops@db-eu ops@db-us
statenamehostcpumemnet txnet rxpidsup
● runningpostgres-primaryops@db-eu█████████░░░ 74%███████░░░░░ 61%1.2 MB/s3.8 MB/s4112d
● runningapi-gatewaydeploy@edge-01██████░░░░░░ 52%█████░░░░░░░ 38%8.4 MB/s6.1 MB/s276d
● runningredis-cacheops@db-eu████░░░░░░░░ 31%███░░░░░░░░░ 22%900 KB/s1.4 MB/s1212d
● runningnginx-ingressdeploy@edge-01██░░░░░░░░░░ 18%██░░░░░░░░░░ 14%12.6 MB/s9.3 MB/s96d
▲ unhealthyworker-etlops@db-us███████████ 88%█████████░░░ 79%400 KB/s200 KB/s334h
● runninggrafanalocal░░░░░░░░░░░ 11%███░░░░░░░░░ 27%300 KB/s600 KB/s1821d
● runningprometheuslocal███░░░░░░░░░ 24%█████░░░░░░░ 44%800 KB/s2.2 MB/s1621d
○ exitedlegacy-cronops@db-us░░░░░░░░░░░░ 0%░░░░░░░░░░░░ 0%0 KB/s0 KB/s
↑↓ move logs/ searchs sortc columnsa all? help
Overview

Nothing to deploy, nothing to configure

No agents on the machines you're watching, no collector, no account. Point dtop at a socket and it starts drawing.

Multi-Host Support

Monitor containers across local, SSH, and TCP connections simultaneously from a single terminal session.

local /var/run/docker.sock
ssh deploy@edge-01:2222
tcp 192.168.1.100:2375
tls ops@db-eu:2376

Real-Time Metrics

Track CPU, memory, and network I/O with smooth exponential moving averages. Color-coded at a glance.

▂▃▅▆▇█▇▆▄▃▂▁▂▄▆▇█▇▅▄▃▂▁▂▃▅▆▇▆▄▃▂▁
ema α 0.3 · tick 500 ms
0–50 50–80 80+

Fast & Lightweight

Built with Rust for minimal CPU and memory footprint. Starts instantly, runs silently in the background.

3.8 MB release binary
1.9 MB without self-update
0 agents to deploy
Config

Write it down once, or let dtop do it

Every flag can live in a YAML file. Or press Ctrl-S in the app and dtop saves your columns, sort and filters for you — keys you set by hand are preserved.

Search order
1 ./config.yaml or ./config.yml, ./.dtop.yaml, ./.dtop.yml
2 .config/dtop/config.yaml or .config/dtop/config.yml
3 .dtop.yaml or .dtop.yml

First file found wins. Command-line flags override whatever the file says.

Hosts
# == Hosts ==
# Docker host(s) to connect to. You can specify multiple hosts to monitor
# them simultaneously.
# Possible values for host: local, ssh://user@host, tcp://host:port, tls://host:port
# Optional fields per host: dozzle (URL), filter (list of Docker filters)
hosts:
  - host: local
  # - host: ssh://user@server1
  #   dozzle: https://dozzle.server1.com/
  #   filter:
  #     - status=running
  #     - label=environment=production
  # - host: tcp://192.168.1.100:2375
  # - host: tls://192.168.1.100:2376
Icons
# == Icons ==
# Icon style for the UI.
# Possible values: unicode, nerd (requires Nerd Font)
icons: unicode
Show All
# == All ==
# Whether to show all containers including stopped, exited, and paused.
# Possible values: true, false
all: false
Sort
# == Sort ==
# Default sort field for the container list.
# Possible values: uptime, name, cpu, memory
sort: uptime
Columns
# == Columns ==
# Column visibility and order.
# List only the columns you want to see, in the order you want them.
# Omitted columns are hidden. Press 'c' in the UI to toggle columns interactively.
# Possible values: status, name, id, host, compose, cpu, memory, pids, net_tx, net_rx, disk_read, disk_write, uptime, restarts
# columns:
#   - status
#   - name
#   - id
#   - host
#   - compose
#   - cpu
#   - memory
#   - net_tx
#   - net_rx
#   - uptime
#   - restarts
Reference

Flags

Generated from dtop --help, so it stays correct as the binary changes.

-H, --host <HOST>

Docker host(s) to connect to. Can be specified multiple times.

--host local Connect to local Docker daemon / active Docker context
--host unix:///path/docker.sock (Connect to a specific Unix socket) --host ssh://user@host Connect via SSH
--host ssh://user@host:2222 Connect via SSH with custom port
--host tcp://host:2375 Connect via TCP to remote Docker daemon
--host tls://host:2376 Connect via TLS
--host local --host ssh://user@server1 --host tls://server2:2376 Multiple hosts
-i, --icons <ICONS>

Icon style to use for the UI

--icons unicode Standard Unicode icons (default, works everywhere)
--icons nerd Nerd Font icons (requires Nerd Font installed)
-f, --filter <FILTER>

Filter containers (can be specified multiple times)

--filter status=running
--filter name=nginx
--filter label=com.example.version=1.0
--filter ancestor=ubuntu:24.04
-a, --all

Show all containers (default shows only running containers)

-s, --sort <SORT>

Default sort field for container list

--sort uptime Sort by container uptime/creation time (default, newest first)
--sort name Sort by container name (alphabetically)
--sort cpu Sort by CPU usage (highest first)
--sort memory Sort by memory usage (highest first)

Hosts and filters combine — dtop --host local --host ssh://user@server -f status=running

Keys

Hands stay on the keyboard

Eight bindings cover the whole surface. Press ? anywhere for the overlay.

↑↓ Move between containers
Stream this container's logs
Back to the container list
Enter Start, stop, restart, remove
/ Search by name or ID
s Choose the sort field
c Show and reorder columns
a Include stopped containers

Start watching in one command

macOS and Linux, Intel and ARM. No account, no telemetry.

brew install dtop