Multi-Host Support
Monitor containers across local, SSH, and TCP connections simultaneously from a single terminal session.
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 v0.10.3 - 7 containers ('?' for help, 'q' to quit)
System workstation CPU █░░░░░░░ 17.5% of 10 cores MEM ████░░░░ 14.5G/32G TX 2.65MB/s RX 6.96MB/s Swap 1.2G/4G Load 2.84 2.61 2.40 Up 8d 9h
Docker local CPU ░░░░░░░░ 3.5% of 10 cores MEM █░░░░░░░ 1.3G/7.7G 2/3 running
System ops@db-eu CPU ██░░░░░░ 19.1% of 8 cores MEM ██░░░░░░ 7.7G/32G TX 1.40MB/s RX 6.40MB/s Load 1.42 1.37 1.29 Up 41d 2h
Docker ops@db-eu CPU █░░░░░░░ 13.1% of 8 cores MEM █░░░░░░░ 5.6G/32G 2/2 running
Docker 10.0.4.12:2375 CPU █░░░░░░░ 9.9% of 16 cores MEM ░░░░░░░░ 2.1G/64G 3/5 running
ID Name Host CPU % Memory % Net TX Net RX Created ▼
a1f3c9e27b04 ✖ worker-etl 10.0.4.12:2375 ██████████████████░░ 88.0% ████████████████░░░░ 1.6G/2G 277.0KB/s 999.0KB/s 4 hours ago
7d2e0b91c5aa ▶ api-gateway 10.0.4.12:2375 ██████████░░░░░░░░░░ 52.0% ███████░░░░░░░░░░░░░ 380M/1G 7.80MB/s 5.80MB/s 6 days ago
e4b8a17f3d62 ▶ nginx-ingress 10.0.4.12:2375 ████░░░░░░░░░░░░░░░░ 18.0% ████░░░░░░░░░░░░░░░░ 96M/512M 12.00MB/s 9.10MB/s 6 days ago
3c91f0d4a8e7 ▶ postgres-main ops@db-eu ███████████████░░░░░ 74.0% █████████████░░░░░░░ 5.2G/8G 98.0KB/s 5.80MB/s 1 week ago
b06d5e2f9c13 ✓ redis-cache ops@db-eu ██████░░░░░░░░░░░░░░ 31.0% ████░░░░░░░░░░░░░░░░ 410M/2G 1.10MB/s 209.0KB/s 1 week ago
58fa2c7e01bd ✓ grafana local ██░░░░░░░░░░░░░░░░░░ 11.0% █░░░░░░░░░░░░░░░░░░░ 212M/7.7G 705.0KB/s 168.0KB/s 3 weeks ago
92e7b4d0f6c8 ▶ prometheus local █████░░░░░░░░░░░░░░░ 24.0% ███░░░░░░░░░░░░░░░░░ 1.1G/7.7G 64.0KB/s 2.20MB/s 3 weeks ago
No agents on the machines you're watching, no collector, no account. Point dtop at a socket and it starts drawing.
Monitor containers across local, SSH, and TCP connections simultaneously from a single terminal session.
Track CPU, memory, and network I/O per container with smooth exponential moving averages. A header adds machine stats for local and SSH hosts. Color-coded at a glance.
Built with Rust for minimal CPU and memory footprint. Starts instantly, runs silently in the background.
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.
First file found wins. Command-line flags override whatever the file says.
# == 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 == # Icon style for the UI. # Possible values: # auto - Nerd Font icons on terminals that ship them built in # (Ghostty, WezTerm, kitty >= 0.36), Unicode elsewhere (default) # unicode - Standard Unicode icons (works everywhere) # nerd - Nerd Font icons (requires Nerd Font) icons: auto
# == All == # Whether to show all containers including stopped, exited, and paused. # Possible values: true, false all: false
# == Sort == # Default sort field for the container list. # Possible values: uptime, name, cpu, memory sort: uptime
# == Hyperlinks == # Render container names as clickable OSC 8 hyperlinks to Dozzle. # Only applies to hosts that have a `dozzle` URL configured above. # Unlike the 'o' key, this works over SSH: the link is opened by your local # terminal, not the remote machine. # Possible values: # auto - enable on terminals known to support OSC 8 (default) # always - always render links. Inside tmux you also need: # set -ga terminal-features "*:hyperlinks" # never - never render links hyperlinks: auto
# == Stats Header == # Show the system stats header above the container list: CPU, memory and # network for this machine, for each SSH host (read from its /proc), and # summed over each host's containers. # Press 't' to toggle it at runtime; Ctrl-S saves the current state. # Possible values: true (default), false stats_header: true
# == 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, image, ports, 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
Generated from dtop --help, so
it stays correct as the binary changes.
Hosts and filters combine — dtop --host local --host ssh://user@server -f status=running
A dozen bindings cover the whole surface. Press ? anywhere for the overlay.
macOS and Linux, Intel and ARM. No account, no telemetry.
$ brew install dtop