mrkeyoor.com_
Sat 31 Oct 08:53 UTC
Dev Toolsevaluationupdated 12 Oct 2026

lazydocker review

Lazydocker is a terminal interface for Docker and Docker Compose that puts container status, logs, and common management commands in one window. It helps you follow a misbehaving service and act on it without repeatedly switching between command output and separate log sessions.

+15stars / 7d
Verdict

Our Lazydocker run built in 34 seconds and passed all 12 reported Go tests, but an October user report shows the published Docker image failing to start against a current daemon. I'd use a native binary for local Docker and Compose inspection, then check shell entry and exit on my own containers. Choose another tool if you need direct containerd support or want to avoid investigating the reported image and shell problems.

We ran it

Lab card: what happened when we ran lazydockerScreenshot of lazydocker (github.com/jesseduffield/lazydocker)
Install✓ · 17s0 packages
Build✓ · 34s
Tests✓ · 16s12 passed · 0 failed of 12 (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 17 seconds (0 packages), and the build succeeded in 34 seconds. We cloned commit 7e7aadc into a clean Debian container with 3 CPUs and no project-specific setup.

Do lazydocker's tests pass?

Yes. The project's own test command finished in 16 seconds and reported 12 passed, 0 failed (go test).

Who should not use lazydocker?

Users choosing the published Docker image to avoid compatibility work: open issue 846 reports that image rejecting a current daemon, and the README separately warns about missing logs and CPU usage in containerized runs.

What are the alternatives to lazydocker?

Portainer Community Edition, ctop. Our Lazydocker run built in 34 seconds and passed all 12 reported Go tests, but an October user report shows the published Docker image failing to start against a current daemon.

Setup4/517-second source install passed; published image has a reported defect
Docs3/5Useful config examples, but wrapping defaults disagree across docs
Community4/5October reports and proposed fixes despite an April last push
Maturity3/512 passing tests; image and shell-exit reports remain open

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 debugging Docker Compose services who want container state and the selected service's logs close together.
Operators already authorized to manage a Docker daemon who prefer a terminal to a browser dashboard.
Docker users who want image-layer inspection and cleanup commands alongside container management.

Who it’s NOT for

Users choosing the published Docker image to avoid compatibility work: open issue 846 reports that image rejecting a current daemon, and the README separately warns about missing logs and CPU usage in containerized runs.
Operators whose main workflow is entering container shells and returning to the dashboard: open issue 848 reports a hang on shell exit, worth checking before relying on it during an incident.
Teams managing containerd directly: Lazydocker documents Docker and Compose support, while containerd support remains an open request in issue 438.
Investigators expecting all available logs immediately: the documented default shows the last hour, so earlier evidence requires configuration changes or a separate log command.

Setup reality

Our run of commit 7e7aadc installed successfully in 17 seconds, with 0 packages reported installed. The build passed in 34 seconds. Go tests passed in 16 seconds: 12 passed, 0 failed, out of 12. We used golang:1.24-bookworm with 3 CPUs and 8 GB of RAM in an unprivileged sandbox.

Useful operation needs a running Docker daemon and permission to access it. The current README requires Docker 29.0.0 or newer and lists Compose as optional. Local use needs no hosted API key. Compose commands need the appropriate project configuration; the container route mounts the Docker socket and a directory for Lazydocker's configuration.

Prefer a native binary for the first trial. The README warns that containerized use can miss logs and CPU usage, and issue 846 reports an incompatible published image. Logs default to the last hour. YAML changes take effect after closing and reopening the application.

Open the failing service's logs before you restart it. Lazydocker makes that sensible habit easier by keeping container state and the selected service's output in one terminal window. You can follow the service you're investigating instead of sorting through a combined log stream, then restart or rebuild it from the same interface. That is its best use: supervised Docker troubleshooting.

Our checkout contained 140 files and roughly 12,757 source lines. The feature list stays close to everyday container work: attaching to a service, inspecting image layers, and removing unused resources. I'd consider it when repeated Docker commands make you lose track of the selected container. You still need to know which action is appropriate. Removal and pruning within easy reach make that knowledge more important.

The default log window hides output older than an hour

Lazydocker's FAQ says it initially shows logs from the last hour. The configuration reference exposes logs.since, and the service log command template also specifies a lookback window. That default can make a stopped container appear to have no useful output when the failure happened earlier. Check the window before diagnosing a silent application, and adjust the relevant setting for the view you're using.

The resource graphs are a separate aid. Our sandbox had 3 CPUs and 8 GB of RAM, but our run recorded no measurement of Lazydocker's own CPU cost or graph accuracy. The documented graphs display container CPU and memory percentages, with configurable statistic paths. They can help you decide which container to inspect next. They don't supply evidence about what happened before the available logs or replace a separate incident record.

What happened when we ran it

Our run installed Lazydocker commit 7e7aadc in 17 seconds and built it in 34 seconds. Both steps succeeded on 2026-10-11 using golang:1.24-bookworm in a fresh unprivileged Debian container with no secrets. The install step reported 0 packages installed. That is the recorded package count for this path, not evidence that the application has no imported Go libraries or that a Docker daemon is unnecessary.

Go tests passed in 16 seconds, with 12 passed and 0 failed out of 12. Our harness found 3 CI workflow files, a Dockerfile, a Compose file, and a tests directory. The checkout occupied 10.6 MB. These results support the source workflow we ran. Those checks do not establish a working connection to a daemon, successful interactive shell sessions, or compatibility of the separate image published on Docker Hub.

The container route has a reported daemon compatibility failure

The current README requires Docker 29.0.0 or newer. Its container command mounts /var/run/docker.sock, giving the UI access to the host daemon, and mounts a configuration directory. Issue 846, opened on October 2, reports the published image refusing to start because its client API is too old for the daemon. The issue requests automated image publication; that request is not a promised fix.

A successful 34-second source build does not validate that published image. The README suggests rebuilding with a Docker version matching the host when the bundled client is incompatible, and separately warns that containerized Lazydocker can lack logs and CPU usage. I would start with a native binary on a machine already configured for Docker. If an image is mandatory, confirming both startup and the views you need belongs in the adoption decision.

Returning from a container shell has an open hang report

Issue 848, opened on October 10, describes Lazydocker hanging after the user exits a container shell. The attached debug output reports potential deadlock and recursive locking. That is evidence from the reporter's session, not a failure we reproduced. For someone who repeatedly opens a shell during troubleshooting, this is a reason to test the round trip before making Lazydocker the default incident interface.

All 12 tests reported by our lab passed, while this interaction remains a separate question. Try the shell action and return using your actual container before adopting it. Also check configuration changes deliberately: the docs say they require restarting Lazydocker. The wrapping guidance disagrees between the FAQ and configuration example, which is another reason to inspect the behavior you have rather than assume every documented default matches.

April code activity and October reports call for a cautious trial

The repository's last push was 2026-04-19, when v0.25.2 shipped project-view fixes and support for the project-name flag. GitHub listed 53,100 stars and 304 open issues and PRs. October activity includes image and shell reports plus a proposed Compose project-name fix. People are still reporting concrete problems. That does not prove rapid maintainer response, and the April release alone does not prove abandonment.

The 3 CI workflow files found in our checkout are useful signals, but they don't answer whether each distributed artifact works on your daemon. Direct containerd support also remains an open request in issue 438. Stay within the documented Docker and Compose scope. For local use, I would keep the ordinary Docker CLI available for a shell exit problem or for retrieving logs outside the configured window.

Portainer suits a browser workflow and ctop centers resource inspection

Portainer Community Edition provides a browser UI for several container environments. Its current README explicitly positions CE for homelabs and directs production users to Business Edition, so it should not be presented as an equivalent free production service. ctop offers a terminal metrics overview with sorting, individual-container inspection, logs, and shell access. Choose it when identifying a busy container is the main task, rather than rebuilding Compose services.

The 10.6 MB source checkout we measured says little about the Docker host you'll manage. The daemon, images, and application data remain outside that figure. Begin with a disposable Compose project, find an older log entry, enter a shell, and return to the dashboard. If those operations work on your setup, Lazydocker earns its place beside the CLI. If the round trip hangs, keep your existing commands until you have a verified fix.

Alternatives

ProjectWhat it isPick it when
Portainer Community Edition gh↗A browser interface for container environments, including Docker, Swarm, and Kubernetes.pick this instead when you want a browser dashboard for a homelab. Its current README directs production users to Business Edition.
ctopA terminal container-metrics viewer with Docker and runC support, logs, and shell access.pick this instead when a sortable container resource overview is the main job and Compose service management is secondary.

Sources

  1. Lazydocker requirements, features, and FAQ
  2. Lazydocker v0.25.2 release notes
  3. Lazydocker configuration reference
  4. Issue 846: published image and Docker API compatibility
  5. Issue 848: hang after exiting a container shell
  6. Issue 438: request for containerd support
  7. Portainer Community Edition intended use
  8. ctop container metrics and commands

More dev tools reviews

linux-insides · cat-catch · date-fns · okhttp · the-craft-of-selfteaching · skills · the whole board →