mrkeyoor.com_
Wed 16 Sept 05:28 UTC
Dev Toolsevaluationupdated 27 Aug 2026

lazydocker review

Lazydocker is a terminal interface for inspecting and controlling Docker containers, images, volumes, and Compose services. It replaces a loop of `docker ps`, log commands, restarts, and cleanup commands with panels and keyboard shortcuts in one terminal.

+70stars / 7d
Verdict

Our lazydocker run built in 24 seconds and passed all 6 measured tests in 11 seconds, which makes it the cleanest trial in this group. Use it for fast, single-user Docker troubleshooting from a terminal, especially when logs and restarts keep sending you across shells. Do not treat its friendly interface as a security boundary: Docker-socket access and one-key destructive operations still carry the daemon's power.

We ran it

Lab card: what happened when we ran lazydockerScreenshot of lazydocker (github.com/jesseduffield/lazydocker)
Install✓ · 13s0 packages
Build✓ · 24s
Tests✓ · 11s6 passed · 0 failed of 6 (go test)
Repo140 files~12,757 lines of source · 10.6 MB · 3 CI workflows · Dockerfile · tests dir

Answers from our run

Does lazydocker build from source?

Dependencies installed in 13 seconds (0 packages), and the build succeeded in 24 seconds. We cloned commit 7e7aadc into a clean Debian container with 3 CPUs and no project-specific setup.

Do lazydocker's tests pass?

Yes: 6 of 6 passed when we ran the project's own test command (go test). Some failures need services or credentials a bare container does not have.

Who should not use lazydocker?

Shared-host operators who cannot accept broad Docker control: the container install mounts /var/run/docker.sock, which effectively grants control over the daemon.

What are the alternatives to lazydocker?

Portainer, Dockge, docui. Our lazydocker run built in 24 seconds and passed all 6 measured tests in 11 seconds, which makes it the cleanest trial in this group.

Setup5/513-second install, 24-second build, all 6 tests passed
Docs4/5Many install paths and useful caveats, though parts are dated
Community4/552,624 stars; active issues continue after the April push
Maturity4/5v0.25.2 is usable, with some open host and project bugs

Discussed on

  1. hnLazydocker: a lazier way to manage everything Docker481 points
  2. hnLazydocker: a terminal GUI for Docker340 points
  3. hnLazydocker: The lazier way to manage everything Docker259 points
  4. hnLazy Docker: The lazier way to manage everything Docker74 points
  5. hnLazyDocker – Manage Everything in Docker23 points

Who it’s for

Developers who spend the day diagnosing local Docker or Compose stacks from a terminal.
Operators who want logs, container state, resource graphs, restarts, rebuilds, and pruning in one TUI.
Go users who prefer a single compiled program with release binaries and package-manager installs.
Teams willing to review Docker-socket access and train users before allowing destructive shortcuts.

Who it’s NOT for

Shared-host operators who cannot accept broad Docker control: the container install mounts /var/run/docker.sock, which effectively grants control over the daemon.
Users who depend on perfect remote-host behavior: an open pull request addresses DOCKER_HOST=ssh:// under Tailscale SSH.
Teams managing several Compose projects with identical service names: open issue 833 reports that this does not work correctly.
Anyone who needs browser-based multiuser access, roles, and central administration: Lazydocker is an interactive terminal client.
Mouse-first users who frequently copy logs: the README requires a modifier while selecting text, and open issue 835 requests native selection in the logs view.

Setup reality

Our sandbox install succeeded in 13 seconds without adding packages. The Go build passed in 24 seconds, then all 6 measured tests passed in 11 seconds. The checkout contained 140 files, about 12,757 source lines, and 10.6 MB.

A release binary or package-manager install is the simplest route. Runtime still needs a reachable Docker daemon, and Compose is optional. The README states Docker 29.0.0 or later, Docker API 1.24 or later, and Compose 1.23.2 or later when Compose features are used.

Running Lazydocker itself in a container mounts the host Docker socket and a configuration directory. The README warns that this container path has a known problem showing logs or CPU use. Remote daemons, Docker client compatibility, terminal mouse behavior, and destructive key actions deserve a local trial.

One terminal replaces repeated Docker status and log commands

Lazydocker arranges projects, services, containers, images, and volumes into terminal panels. Select an object and the main pane shows logs, configuration, statistics, or command output. Common actions such as restart, stop, remove, rebuild, attach, and prune sit behind key presses. The gain is modest but real: during a failing Compose startup, you can watch one service, restart it, and keep its context visible.

The program is intentionally local and interactive. It does not add a control plane, user database, or web server. Release v0.25.2 was published on April 19, 2026 and includes support for the Compose -p flag plus changes to project views. That narrow role keeps the tool understandable, while users still need to know what Docker actions do before confirming removal or pruning.

The 48-second lab path was clean from install through tests

Our sandbox installed the Go project in 13 seconds without adding system packages. The build succeeded in 24 seconds. Tests finished in 11 seconds, with 6 passed and 0 failed out of 6. The complete measured path therefore took 48 seconds on commit 7e7aadc in an unprivileged Debian container with 3 CPUs and 8 GB of RAM.

The repository was also compact beside the other projects in this batch: 140 files, about 12,757 lines of source, and 10.6 MB checked out. Our scan found 3 CI workflow files, a Dockerfile, a Compose file, and a tests directory. These signals line up with the successful build and test result, though 6 measured tests cannot cover every Docker daemon, terminal, operating system, or remote connection.

What happened when we ran it

Our run produced no install error, compiler error, or failing test. Go dependency resolution did not install any extra system package, and the resulting build completed in 24 seconds. All 6 tests passed in 11 seconds. That is strong evidence that the checked-out commit is straightforward to compile in the stated Go 1.24 Debian image. It is not a usability or daemon-compatibility benchmark.

We did not connect the binary to a live Docker workload in this measurement. The test result therefore does not cover log streaming, container stats, Compose discovery, socket permissions, or a destructive action against a real daemon. Those behaviors depend on the Docker client and server around Lazydocker. The README currently states Docker 29.0.0 or later, with API 1.24 or later, and optional Compose 1.23.2 or later.

Binary installs avoid Go, while the container route adds socket risk

Homebrew, Scoop, Chocolatey, asdf, Arch packages, release binaries, go install, a shell installer, and a Docker image are all documented. A release binary is the least surprising choice for most developers because it avoids a compiler and runs directly against the existing Docker client. The project requires Go 1.19 or later when building through the current go install path.

The container installation mounts /var/run/docker.sock. Any program with that access can control containers and, in common setups, reach host-level capabilities through the daemon. Mount only a trusted image, pin the version, and avoid exposing the TUI to untrusted users. The README also says the containerized route has a known issue where logs or CPU usage may not appear, which undercuts two of the interface's most useful panels.

Remote hosts and duplicate service names need a trial

Open pull request 831 addresses a case where DOCKER_HOST=ssh:// fails with Tailscale SSH. Open issue 767 reports a Docker client version error, and the README suggests rebuilding the image with a Docker version matching the host if its bundled client is incompatible. If remote daemon access is part of the purchase decision, test the same SSH transport, Docker versions, and authentication setup used in production.

Compose users should also read issue 833, opened in August 2026, which reports trouble when multiple projects have the same service names. A related pull request is open. Those collisions are common in development fleets where every repository names a service web, api, or db. Until a fix is released and verified, launch Lazydocker from the intended project and confirm every action targets the expected Compose scope.

Mouse handling and one-key actions trade safety for speed

Mouse support lets users click panels, but terminal selection needs a modifier because the program consumes mouse events. The README explains how to disable them, and issue 835 requests native selection in the logs view. This sounds small until incident work requires copying a specific trace quickly. Keyboard users will have fewer complaints, especially after learning the documented bindings.

Speed also raises the cost of a mistaken prune or remove command. Lazydocker does not reduce Docker authority; it makes that authority easier to invoke. Issue 828 reports that a Compose project label could be used unescaped in command construction on shared hosts, with pull request 829 proposing validation. Even when fixed, the safe operating model is one trusted user controlling a daemon, rather than a terminal shared among tenants.

April code and August issue activity show a maintained but uneven pace

GitHub recorded 52,624 stars, 296 combined issues and pull requests, and a last repository push on April 19, 2026. Users and contributors were still active in issues and proposed changes during August 2026. That split points to ongoing interest and patch work, while the default branch had not received those later proposals when we fetched the facts.

Lazydocker earns a place in a developer's terminal because the 48-second measured path passed and the interface addresses a frequent annoyance without introducing a service. Portainer is better for shared browser administration, and Dockge is more focused on Compose stack files. For personal debugging, install the binary, review the bindings, test the exact Docker host, and keep the convenience in proportion to the socket authority behind it.

Alternatives

ProjectWhat it isPick it when
Portainer gh↗A browser-based management interface for Docker and Kubernetes environments.pick this instead when multiple users need a central web interface and broader environment administration.
DockgeA web interface centered on managing Docker Compose stacks and their YAML files.pick this instead when Compose stack editing and browser access matter more than terminal speed.
docuiA Docker terminal client whose repository is now archived.pick this instead only when its interaction model fits better and you accept an archived codebase.

Sources

  1. lazydocker README
  2. lazydocker repository facts
  3. lazydocker v0.25.2 release
  4. Issue 833: duplicate service names
  5. Issue 828: Compose label command construction
  6. Issue 835: mouse text selection

More dev tools reviews

IKONA-Security · noty · forward-implementation-first · breakscale · black · ASC · the whole board →