Tools

lazydocker: manage containers, compose, images and volumes in one terminal screen

TL;DR

lazydocker puts everyday docker commands into one UI: m for logs, E to exec a shell, r to restart, [ ] to switch Stats/Logs tabs, b to clean images and volumes. Deletions are real, so read before confirming.

Working with Docker every day means constantly typing docker ps, copying container IDs, docker logs -f, docker exec -it ... sh, docker compose restart, then cleaning up stale images. Each step is simple, but together they eat a lot of time. lazydocker (by the author of lazygit) puts all of it in one terminal UI: containers, compose services, images and volumes at once, live logs and CPU/RAM graphs, and single-key actions.

GitHub page of jesseduffield/lazydocker
GitHub page of jesseduffield/lazydocker (screenshot, November 2026)

GitHub: https://github.com/jesseduffield/lazydocker · about 53k stars · Go · MIT

Installation

brew install lazydocker            # macOS
# Linux: install script from the README
curl https://raw.githubusercontent.com/jesseduffield/lazydocker/master/scripts/install_update_linux.sh | bash
go install github.com/jesseduffield/lazydocker@latest

lazydocker      # run in a directory with docker-compose.yml to see services too

Tip: add alias lzd='lazydocker' to your .zshrc.

Screen layout

The left side lists Project, Services (from docker compose), Containers, Images and Volumes. The right side is the main panel with tabs for the selected item: Logs, Stats (CPU and memory graphs), Env, Config, Top. Use [ and ] to switch tabs, / to filter a list, enter to focus the main panel.

Main shortcuts

KeyContainerService (compose)
sStopStop
rRestartRestart
dRemoveRemove the service's containers
EExec a shell insideExec a shell inside
aAttachAttach
mView logsView logs
wOpen browser on the first portOpen browser
u / U / D—Up service / up project / down project
bBulk commandsBulk commands

The b key (bulk commands) in the Images and Volumes panels is handy for pruning unused images when the disk fills up.

Customisation

  • Press o in the Project panel to open the config file, e to edit it.
  • Add custom commands for repetitive actions, such as running migrations in a container, then trigger them with c.
  • Change the default compose command if you use docker compose (v2) rather than the old docker-compose.

Caveats

  • lazydocker calls the Docker API with your permissions; removing containers or pruning volumes is real, and volume data can be lost.
  • It doesn't replace production monitoring: it suits dev machines and small servers.
  • You can run lazydocker in a container (the README has a docker run command mounting docker.sock), but mounting the socket gives that container full control of Docker.

How to apply it

  • Dev: When running a multi-service stack with compose, keep lazydocker open to follow each service's logs and quickly restart the one you just changed.
  • Tech Lead: Show new developers lazydocker so they see how services interact, instead of memorising dozens of docker commands.
  • PM: Less "the environment won't start" time for new developers, because each service's errors are right there in the log panel.

Sources & references

  1. jesseduffield/lazydocker — jesseduffield (GitHub)