A visual Docker debug helper. 105 curated commands, output-aware follow-ups, terminal or browser — one Rust binary that wraps your real docker CLI.
When something breaks in a container, the workflow is almost always the same — and the shell makes you do it manually.
# find the thing docker ps -a # squint, copy a name with the mouse docker logs casely-postgres-1 docker inspect casely-postgres-1 docker exec -it casely-postgres-1 sh
The container name doesn't change between those commands. Yet you copy and paste it three or four times — sometimes typoing a hash prefix.
dux watches the output of every command it runs. After docker ps, every follow-up that wants a container is already pre-filled. ↑/↓ to cycle. Enter to run.
Each command in the catalog is a typed struct: placeholders are tagged with a kind (container, image, network, volume, service), and each command declares what kind of items its stdout produces. Everything else falls out of those two annotations.
Containers, images, networks, volumes, system, compose. Each with an explainer that's also searchable.
After docker ps, the next command's container arg is prefilled with extracted names. Same for images, networks, volumes.
One binary, two surfaces. dux for the terminal (ratatui), dux serve for an HTTP UI on any route.
Every action shells out to your real docker CLI. Nothing to upgrade in lockstep, no socket to expose.
Three flows that come up every day. Click any GIF to view full-size.
The left pane is the catalog — 105 commands across 8 categories. The right pane shows the highlighted command's explainer above the run output, and the suggested follow-ups below.
Two ways. Brew installs from a tap, source build works on any platform with Rust 1.75+.
brew install nickciolpan/tap/dux
git clone https://github.com/nickciolpan/dux.git
cd dux
cargo install --path .
dux for the TUI or dux serve for the browser UI. Full keybindings and architecture docs in the README.