A single-binary Docker terminal UI built with Go + Bubble Tea.

j/k, g, G[x] markersDocker does not let you change published ports on an existing container in-place. The TUI now shows port mappings clearly and reminds you that port changes require recreating the container with new
-p/-Psettings. - Snippets store container names and can run: -docker start <name1> <name2> ...-docker stop <name1> <name2> ...- Snippet browser supports: - fuzzy search - multi-select - start selected/current snippet containers - stop selected/current snippet containers - delete selected/current snippets - delete all snippets - In-TUI container shell - Container logs viewer with latest-first open, keyboard/mouse scrolling, search, match navigation, horizontal scrolling, fullscreen mode, and colored log levels - Docker command palette with autocomplete - Detects and reports when Docker is not running - Single binary output
You need:
1.26+PATHmake (optional, only if you want to use the Makefile targets)Go dependencies are fetched automatically from go.mod:
github.com/charmbracelet/bubbleteagithub.com/charmbracelet/bubblesgithub.com/charmbracelet/lipglossgithub.com/creack/ptygo mod tidy
go build -o docker-tui .
This produces a single local binary:
./docker-tui
Build the local binary:
make build
This creates:
./docker-tui
Run it directly:
./docker-tui
Or build and run with Makefile:
make run
Useful Make targets:
make build # build local binary at ./docker-tui
make run # build and run
make tidy # tidy go modules
make test # run tests
make clean # remove local and release binaries
make release # build all release binaries in dist/
make release-linux-amd64 # rebuild dist/docker-tui_linux_amd64
make release-linux-arm64 # rebuild dist/docker-tui_linux_arm64
make buildonly refreshes./docker-tui. It does not updatedist/. If you are testing on Linux or WSL, rebuild the release binary withmake release-linux-amd64(ormake release) before runningdist/docker-tui_linux_amd64.
Create release binaries with:
make release
This generates binaries in dist/:
docker-tui_darwin_arm64docker-tui_darwin_amd64docker-tui_linux_amd64docker-tui_linux_arm64linux_* binarydist/docker-tui_linux_amd64So no separate WSL-only binary is needed.
./docker-tui
j/k or arrow keys: moveg / G: jump to top / bottom/: focus fuzzy searchv: switch between containers and volumestab: toggle all/running filter for containersspace: select/unselect current containera: select/unselect all visible containersx: start selected containers, or all containers if none selecteds: stop selected containers, or all running containers if none selectedd: delete selected containers, or current container if none selected, with confirmationS: save selected containers as a snippetp: open snippet browserP: show a reminder that Docker port mappings on existing containers must be changed by recreating the containerEnter: open interactive PTY shell for selected running container inside the TUI, or refresh the selected volume preview in volumes viewl: show logs for selected containerf: toggle log follow mode:: open Docker command palette with autocomplete?: show/hide keyboard helpr: refresh containers and volumesq: quitspaceSEnterThe snippet stores the selected container names.
Press:
p
/: search snippets with fuzzy searchesc: leave search, then close browserj/k: movespace: mark/unmark current snippeta: mark/unmark all visible snippetse: edit the current snippet in a popup, including renaming it and updating its container listx: run docker start for selected snippets, or current snippet if none selecteds: run docker stop for selected snippets, or current snippet if none selectedd: delete selected snippets, or current snippet if none selected, with confirmationD: delete all snippets, with confirmationtab switches between the name field and container list, space toggles the highlighted container, a toggles all, enter saves, esc cancelsd or D: tab or ←/→ switches Yes/No, enter confirms selected option, esc cancelsTo view logs:
lWhen logs open:
zInside logs view:
j/k or arrow keys: scroll logs verticallyh/l or left/right keys: scroll logs horizontallyy: copy selected log text to clipboardc: clear selected log textctrl+u / ctrl+d: page up / page downg / G: jump to top / bottom/: search logsn / N: next / previous search result positionz: toggle fullscreen logs paneenter in search: keep search and return to logs navigationesc: leave search, or leave logs if search is not activef: toggle follow mode for latest logsERROR, WARN, INFO, DEBUG, TRACE are colorizedenter or esc: return from logs viewTo open a shell inside the TUI:
EnterInside shell view:
docker exec -u 0 -it ...cd /, history, tab completion inside the container shell, etc.)ctrl+q: close the shell and return to the TUIspace: works normally inside the shellesc: is passed through to the shellctrl+l: clears inside the shellSnippets are stored at:
~/.config/docker-tui/snippets.json
$ claude mcp add docker-tui \
-- python -m otcore.mcp_server <graph>