A keyboard-first Docker dashboard for the terminal.
Manage containers, images, volumes, networks, and compose projects without leaving your shell.

Switching between Docker commands and a GUI breaks focus. docker-dash keeps the feedback loop tight with a fast terminal interface for inspecting, filtering, and managing your Docker environment.
Homebrew:
brew tap GustavoCaso/tap
brew install docker-dash
Go:
go install github.com/GustavoCaso/docker-dash/cmd/docker-dash@latest
Build from source:
make build
docker-dash
β / βtab to switch focus between the list and the section panelβ / β to move in the focused area/r and open help with ?s, D, P, +, and cUse the containers view to inspect logs and details, restart with ctrl+R, or start and stop with s.
Prune unused containers, images, networks, and volumes directly from the relevant section with P.
Pass a Docker host on the command line:
docker-dash --docker.host ssh://user@example-host
Or set it in your config file for everyday use.
By default, docker-dash looks for a config file at ~/.config/docker-dash/config.toml.
[docker]
# Docker daemon URL. Accepts tcp, unix, and ssh schemes.
host = "ssh://pi5@pi5"
[refresh]
# Auto-refresh interval
# Examples: "500ms", "5s", "1m", "2m30s"
interval = "10s"
[debug]
enabled = false
[update_check]
# Check the remote registry for newer image versions on a configurable interval.
# When an update is available, a β¬ icon appears next to the image in the list.
# Press "u" in the Images section to pull the update directly.
enabled = false
# Polling interval. Examples: "30m", "1h", "6h"
interval = "1h"
[logs]
# Stream logs in real-time (follow mode). Set to false to fetch a static snapshot.
follow = true
# Number of log lines to show from the end of the log. Use "all" to show everything.
tail = "100"
# Prepend timestamps to each log line.
timestamps = false
# Show logs since a relative duration.
# "10m", "2h", "24h".
# Empty string means show all available logs.
since = "2h"
| Flag | Description |
|---|---|
--config | Path to config file (default: ~/.config/docker-dash/config.toml) |
--docker.host | Docker daemon URL (overrides config file) |
--refresh.interval | Auto-refresh interval (overrides config file) |
--debug | Enable debug logging (overrides config file) |
CLI flags take precedence over config values.
When debug mode is enabled, docker-dash writes a debug log file to the system temporary directory.
Press ? in the app to see the full keymap. The most commonly used bindings are:
| Key | Action |
|---|---|
β / β | Switch section |
β / β | Move in focused area (list or panel) |
tab | Toggle focus between list and panel |
shift+β / shift+β | Switch panels |
y | Copy ID to clipboard |
/ | Filter |
r / ctrl+r | Refresh current view / refresh all |
? | Toggle help |
q | Quit |
When focus is on the panels the navigations keys ββββ are redirected to the panel. If you want to change sections you need to swicth the focus back to the lits using the tab
Contextual actions depend on the active section. For example:
s starts or stops containers and compose projectsD deletes containers and networks, or brings compose projects downP prunes unused resources+ pulls an imagec creates and runs a container from an imageu pulls an image update (Images section) or brings a compose project up (Compose section)| Key | Action |
|---|---|
d | Delete image |
P | Prune all unused images |
c | Create and run container |
+ | Pull image |
u | Pull image update (requires update_check.enabled = true; β¬ icon indicates update available) |
| Key | Action |
|---|---|
D | Delete container |
P | Prune unused container |
p | pause/unpause container |
s | Start/stop |
ctrl+R | Restart |
| Key | Action |
|---|---|
d | Delete volume |
P | Prune all unused volumes |
| Key | Action |
|---|---|
P | Prune unused networks |
D | Delete network |
| Key | Action |
|---|---|
u | Compose up |
D | Compose down |
s | Start/stop project |
ctrl+R | Restart project |
| Key | Action |
|---|---|
r | Refresh |
ctrl+r | Refresh all |
make test # Run tests
make lint # Run linter
make build # Build binary
Tests use a mock Docker client, so no Docker daemon is required.
Go
99.8%
A keyboard-first Docker dashboard for the terminal.
Manage containers, images, volumes, networks, and compose projects without leaving your shell.

Switching between Docker commands and a GUI breaks focus. docker-dash keeps the feedback loop tight with a fast terminal interface for inspecting, filtering, and managing your Docker environment.
Homebrew:
brew tap GustavoCaso/tap
brew install docker-dash
Go:
go install github.com/GustavoCaso/docker-dash/cmd/docker-dash@latest
Build from source:
make build
docker-dash
β / βtab to switch focus between the list and the section panelβ / β to move in the focused area/r and open help with ?s, D, P, +, and cUse the containers view to inspect logs and details, restart with ctrl+R, or start and stop with s.
Prune unused containers, images, networks, and volumes directly from the relevant section with P.
Pass a Docker host on the command line:
docker-dash --docker.host ssh://user@example-host
Or set it in your config file for everyday use.
By default, docker-dash looks for a config file at ~/.config/docker-dash/config.toml.
[docker]
# Docker daemon URL. Accepts tcp, unix, and ssh schemes.
host = "ssh://pi5@pi5"
[refresh]
# Auto-refresh interval
# Examples: "500ms", "5s", "1m", "2m30s"
interval = "10s"
[debug]
enabled = false
[update_check]
# Check the remote registry for newer image versions on a configurable interval.
# When an update is available, a β¬ icon appears next to the image in the list.
# Press "u" in the Images section to pull the update directly.
enabled = false
# Polling interval. Examples: "30m", "1h", "6h"
interval = "1h"
[logs]
# Stream logs in real-time (follow mode). Set to false to fetch a static snapshot.
follow = true
# Number of log lines to show from the end of the log. Use "all" to show everything.
tail = "100"
# Prepend timestamps to each log line.
timestamps = false
# Show logs since a relative duration.
# "10m", "2h", "24h".
# Empty string means show all available logs.
since = "2h"
| Flag | Description |
|---|---|
--config | Path to config file (default: ~/.config/docker-dash/config.toml) |
--docker.host | Docker daemon URL (overrides config file) |
--refresh.interval | Auto-refresh interval (overrides config file) |
--debug | Enable debug logging (overrides config file) |
CLI flags take precedence over config values.
When debug mode is enabled, docker-dash writes a debug log file to the system temporary directory.
Press ? in the app to see the full keymap. The most commonly used bindings are:
| Key | Action |
|---|---|
β / β | Switch section |
β / β | Move in focused area (list or panel) |
tab | Toggle focus between list and panel |
shift+β / shift+β | Switch panels |
y | Copy ID to clipboard |
/ | Filter |
r / ctrl+r | Refresh current view / refresh all |
? | Toggle help |
q | Quit |
When focus is on the panels the navigations keys ββββ are redirected to the panel. If you want to change sections you need to swicth the focus back to the lits using the tab
Contextual actions depend on the active section. For example:
s starts or stops containers and compose projectsD deletes containers and networks, or brings compose projects downP prunes unused resources+ pulls an imagec creates and runs a container from an imageu pulls an image update (Images section) or brings a compose project up (Compose section)| Key | Action |
|---|---|
d | Delete image |
P | Prune all unused images |
c | Create and run container |
+ | Pull image |
u | Pull image update (requires update_check.enabled = true; β¬ icon indicates update available) |
| Key | Action |
|---|---|
D | Delete container |
P | Prune unused container |
p | pause/unpause container |
s | Start/stop |
ctrl+R | Restart |
| Key | Action |
|---|---|
d | Delete volume |
P | Prune all unused volumes |
| Key | Action |
|---|---|
P | Prune unused networks |
D | Delete network |
| Key | Action |
|---|---|
u | Compose up |
D | Compose down |
s | Start/stop project |
ctrl+R | Restart project |
| Key | Action |
|---|---|
r | Refresh |
ctrl+r | Refresh all |
make test # Run tests
make lint # Run linter
make build # Build binary
Tests use a mock Docker client, so no Docker daemon is required.
Go
99.8%