docker-dash

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

Why docker-dash?
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.
- Stay in the terminal instead of bouncing between tools
- Troubleshoot faster with logs, details, and exec access close at hand
- Work with local or remote Docker hosts, including SSH-based setups
- Manage compose projects alongside containers, images, volumes, and networks
- Develop without a Docker daemon thanks to the built-in mock client fallback
What you can do
- Browse and manage containers, images, volumes, networks, and compose projects
- Inspect container logs, stats, details, and files interactively
- Start, stop, restart, and remove containers and compose projects
- Exec into running containers without leaving the TUI
- Filter resources quickly and inspect image layers
- Clean up unused resources with prune actions
- Check for image updates from the registry on a configurable interval and pull updates in one keystroke
Quick start
Install
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
Run
docker-dash
A few things to try
- Move between sections with
← / →
- Press
tab to switch focus between the list and the section panel
- Use
↑ / ↓ to move in the focused area
- Filter the current list with
/
- Refresh with
r and open help with ?
- Manage resources with contextual actions such as
s, D, P, +, and c
Great fit for
- Developers who live in the terminal
- Docker users who want a faster feedback loop than memorizing many commands
- Remote and homelab workflows where SSH Docker hosts are common
- Anyone who wants quick visibility into running services, logs, and container state
Common workflows
Troubleshoot a container
Use the containers view to inspect logs and details, restart with ctrl+R, or start and stop with s.
Clean up Docker resources
Prune unused containers, images, networks, and volumes directly from the relevant section with P.
Connect to a remote Docker host
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.
Configuration
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"
CLI flags
| 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.
Debug mode
When debug mode is enabled, docker-dash writes a debug log file to the system temporary directory.
Keybindings
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 projects
D deletes containers and networks, or brings compose projects down
P prunes unused resources
+ pulls an image
c creates and runs a container from an image
u pulls an image update (Images section) or brings a compose project up (Compose section)
Full keybindings by section
Images
| 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) |
Containers
| Key |
Action |
D |
Delete container |
P |
Prune unused container |
p |
pause/unpause container |
s |
Start/stop |
ctrl+R |
Restart |
Volumes
| Key |
Action |
d |
Delete volume |
P |
Prune all unused volumes |
Networks
| Key |
Action |
P |
Prune unused networks |
D |
Delete network |
Compose
| Key |
Action |
u |
Compose up |
D |
Compose down |
s |
Start/stop project |
ctrl+R |
Restart project |
Global
| Key |
Action |
r |
Refresh |
ctrl+r |
Refresh all |
Development
make test # Run tests
make lint # Run linter
make build # Build binary
Tests use a mock Docker client, so no Docker daemon is required.
Requirements
- Go 1.26+
- Docker (optional — falls back to mock data without it)