LA

lazydocker

Terminal UI for Docker and Docker Compose

Developer Tools & Git ★ 52.9k stars Easy setup MIT

lazydocker is an open-source terminal user interface for managing Docker containers, images, volumes, and Compose projects. It provides a fast keyboard-driven way to inspect self-hosted container stacks.

Key features

  • Container management TUI
  • Live logs and stats
  • Compose project view
  • Bulk actions

Pros & cons

Strengths

  • Fast keyboard-driven UI
  • Single small binary
  • Compose project support

Trade-offs

  • Terminal interface only
  • No Kubernetes support

lazydocker replaces

Last reviewed Aug 26, 2026 · 943 words

SSH into any box running Docker, type lazydocker, and within a second every container, Compose service, image, volume, and network is on screen with live logs and CPU and memory graphs one keypress away. For a homelab operated by one person from a terminal, that is the entire container dashboard: no port to expose, no login page, no database, a single MIT-licensed Go binary that uses about 64 MB of RAM and can be deleted without a trace. It comes from the author of lazygit and shares its philosophy, which is that the common operations should each cost one key.

It is a cockpit for one host, not a control plane

lazydocker talks to one Docker socket at a time, has no users, and stores nothing. If you need a browser UI that a partner or a teammate can use, or a view across five hosts from one screen, this is the wrong tool and Portainer-style dashboards exist for that reason. If your household's need for "see the logs" is really "let someone else see the logs", Dozzle is the browser-based answer and pairs well with lazydocker rather than replacing it. What lazydocker is for is the operator: the person who would otherwise be typing docker compose logs -f --tail 200 immich-server for the fourth time today.

Install is one line; the docker group is the setup

curl -fsSL https://raw.githubusercontent.com/jesseduffield/lazydocker/master/scripts/install_update_linux.sh | bash
sudo usermod -aG docker "$USER"   # then log out and back in
lazydocker

brew install lazydocker on macOS and go install github.com/jesseduffield/lazydocker@latest are the other routes, and the install script doubles as the updater. The usermod line is the part people skip and then blame the tool for: lazydocker needs to read /var/run/docker.sock, and without group membership it opens to an empty screen or a permission error. Running it under sudo works but leaves your config in root's home, so fix the group instead. To install nothing at all, docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock lazyteam/lazydocker runs it from an image.

Ten keys cover the daily loop

The left column is a stack of panels (Project, Containers, Services, Images, Volumes, Networks); the right side is a main panel whose tabs change with the selection. Arrow keys or j/k move, tab cycles panels, and then:

  • [ and ] switch the main panel between logs, stats, config, top, and env for whatever is selected
  • enter focuses the main panel so you can scroll the logs; esc comes back
  • s stops, r restarts, d removes, a attaches a terminal
  • E execs a shell into the selected container, which alone is worth the install
  • b opens the bulk menu on any panel: prune stopped containers, dangling images, unused volumes
  • x opens the menu of every action available for the current panel, which is the manual
  • q quits

The stats tab is the sleeper feature. It graphs CPU and memory per container over the time you have been watching, so the answer to "which container is eating the box" is a glance rather than a docker stats table you squint at. On the Services panel, the same keys act on Compose services, and the Project panel shows the compose file itself alongside the project's aggregated logs, which is the fastest way I know to confirm a docker compose up -d did what you meant.

Custom commands turn it into your runbook

The config file (~/.config/jesseduffield/lazydocker/config.yml on Linux) accepts custom commands bound to panels, with Go templates for the selection. Two I keep everywhere:

commandTemplates:
  dockerCompose: docker compose
customCommands:
  containers:
    - name: shell
      attach: true
      command: "docker exec -it {{ .Container.Name }} /bin/sh"
  services:
    - name: pull and recreate
      attach: true
      command: "{{ .DockerCompose }} pull {{ .Service.Name }} && {{ .DockerCompose }} up -d {{ .Service.Name }}"

Press c on a container or service and pick from the list. The dockerCompose template line is for hosts with only Compose v2 (docker compose, no hyphen), which is every modern install. The "pull and recreate" command is the one-service-at-a-time update I trust more than blanket auto-updaters; the reasoning is in container updates without fires. If your stacks follow the layout in Compose patterns for the homelab, lazydocker's Project panel maps onto one directory per stack without any configuration.

Over SSH it is native, and it can reach remote hosts too

Because it is a terminal program, lazydocker works over SSH exactly as it does locally, and inside tmux or zellij it becomes the persistent "ops tab" I leave open on every server. It also honours the Docker client's environment, so DOCKER_HOST=ssh://user@nas lazydocker from a laptop drives a remote daemon over SSH without installing anything on the NAS beyond Docker. That plus a Tailscale tunnel covers the "manage from anywhere" case that people usually buy a web dashboard for. The limits are the ones the catalogue lists: no Kubernetes, terminal only, and it will not edit compose files, schedule anything, or notify you.

What I'd do

Install it on every Docker host the day the host is built, add the two custom commands above, and stop opening a browser to check why a container restarted. Keep Dozzle alongside for anyone who needs logs without a shell. If you are choosing between lazydocker and a web dashboard for a single-operator homelab, choose lazydocker; the dashboard is another service to update, and this is a binary that is already there.

Compare lazydocker

2 head-to-head comparisons.

Similar developer tools & git apps