The lazier way to manage everything docker
Find a file
2026-01-07 14:09:14 -04:00
.circleci Rename lazydocker to lazypodman (Phase 1) 2026-01-06 19:07:13 -04:00
.devcontainer Rename lazydocker to lazypodman (Phase 1) 2026-01-06 19:07:13 -04:00
.github Phase5 and Phase6 completed 2026-01-07 14:09:14 -04:00
assets Add subble job ad 2025-10-29 21:56:08 +11:00
docs updated documentation (phase5) 2026-01-07 13:31:30 -04:00
hooks Added Docker automated build hook and readme badges for Docker 2019-07-02 14:06:44 +02:00
pkg Phase5 and Phase6 completed 2026-01-07 14:09:14 -04:00
scripts Phase5 and Phase6 completed 2026-01-07 14:09:14 -04:00
test Phase5 and Phase6 completed 2026-01-07 14:09:14 -04:00
vendor completed phase3 of the PLAN.md 2026-01-07 12:13:16 -04:00
.dockerignore Git commit reference mechanism changed 2019-07-01 15:37:55 +02:00
.gitignore Add networks panel 2023-03-06 01:25:23 +03:00
.golangci.yml Fix types 2025-11-14 21:20:28 +11:00
.goreleaser.yml Rename lazydocker to lazypodman (Phase 1) 2026-01-06 19:07:13 -04:00
CLAUDE.md Rename lazydocker to lazypodman (Phase 1) 2026-01-06 19:07:13 -04:00
CODE-OF-CONDUCT.md repurpose lazygit code 2019-05-12 10:32:02 +10:00
CONTRIBUTING.md Rename lazydocker to lazypodman (Phase 1) 2026-01-06 19:07:13 -04:00
coverage.txt completed phase3 of the PLAN.md 2026-01-07 12:13:16 -04:00
docker-compose.yml Rename lazydocker to lazypodman (Phase 1) 2026-01-06 19:07:13 -04:00
Dockerfile Upgrade Go version from 1.21 to 1.23 in Dockerfile 2025-11-14 13:32:29 +01:00
go.mod executed phase2 of the plan 2026-01-07 08:56:09 -04:00
go.sum executed phase2 of the plan 2026-01-07 08:56:09 -04:00
lazypodman completed phase3 of the PLAN.md 2026-01-07 12:13:16 -04:00
LICENSE repurpose lazygit code 2019-05-12 10:32:02 +10:00
main.go executed phase2 of the plan 2026-01-07 08:56:09 -04:00
PLAN.md Rename lazydocker to lazypodman (Phase 1) 2026-01-06 19:07:13 -04:00
README.md updated documentation (phase5) 2026-01-07 13:31:30 -04:00
test.sh test.sh: fix file not being executable 2024-07-15 11:00:44 +02:00

A simple terminal UI for Podman and podman-compose, written in Go with the gocui library.

Fork Notice: This project is a fork of lazydocker by Jesse Duffield, converted to use Podman's native libpod library instead of the Docker SDK.

CI Go Report Card GolangCI GoDoc GitHub repo size GitHub Releases GitHub tag homebrew

Gif

Demo

Sponsors

Maintenance of this project is made possible by all the contributors and sponsors. If you'd like to sponsor this project and have your avatar or company logo appear below click here. 💙

Mark LussierDean HerbertPeter BjorklundReilly WoodOliver GüntherPawan DhananjayBartłomiej DachDavid KarlssonCarsten GehlingCEUKAkos PutzXeteraHolden LucasChau TranmatejciktheAverageDev (Luca Tumedei)Ivan ZaitsevNicholas CloudLightQuantumGabriel SaillardAliaksandr StelmachonakBurgy BenjaminJoe KlemmerTobias LütkeBen BeaumontHollyJames SantucciJeff ForcierMaciej T. NowakFarzad MajidfayyazYuryAndreas KurthBraden SteffaniakJordan GillardSebastianGeorge SpanosFrantisek StankoAndy SlezakMartin KockIllarion KoperskiJesse AlamaCodacyBrettJan HeijmansKevin Nowaldsem pruijsOmar Luq Ethan LiBrian MacAskillMaxinbrJan ZenknerVictor AremuIgor RamazanovElliott Maguiren8n - Workflow Automationkaleb allmonJosh ThomasJJFrederick MorlockDarren CraineMaximilian LangenfeldNurzhanDavis BulsGrec MarcsainuMarc Güell SegarraChris OlsenVladimir PopovNeil LambertShaun GarwoodDavid Heinemeier HanssonWayan jimmy

Elevator Pitch

Minor rant incoming: Something's not working? Maybe a service is down. podman-compose ps. Yep, it's that microservice that's still buggy. No issue, I'll just restart it: podman-compose restart. Okay now let's try again. Oh wait the issue is still there. Hmm. podman-compose ps. Right so the service must have just stopped immediately after starting. I probably would have known that if I was reading the log stream, but there is a lot of clutter in there from other services. I could get the logs for just that one service with podman-compose logs --follow myservice but that dies everytime the service dies so I'd need to run that command every time I restart the service. I could alternatively run podman-compose up myservice and in that terminal window if the service is down I could just up it again, but now I've got one service hogging a terminal window even after I no longer care about its logs. I guess when I want to reclaim the terminal realestate I can do ctrl+P,Q, but... wait, that's not working for some reason. Should I use ctrl+C instead? I can't remember if that closes the foreground process or kills the actual service.

What a headache!

Memorising podman commands is hard. Memorising aliases is slightly less hard. Keeping track of your containers across multiple terminal windows is near impossible. What if you had all the information you needed in one terminal window with every common command living one keypress away (and the ability to add custom commands as well). Lazypodman's goal is to make that dream a reality.

Requirements

  • Podman >= 5.0
  • podman-compose >= 1.0 (optional, for compose support)

Installation

Homebrew

Normally lazypodman formula can be found in the Homebrew core but we suggest you to tap our formula to get frequently updated one. It works with Linux, too.

Tap:

brew install christophe-duc/lazypodman/lazypodman

Core:

brew install lazypodman

Scoop (Windows)

You can install lazypodman using scoop:

scoop install lazypodman

Chocolatey (Windows)

You can install lazypodman using Chocolatey:

choco install lazypodman

asdf-vm

You can install asdf-lazypodman plugin using asdf-vm:

Setup (Once)

asdf plugin add lazypodman https://github.com/comdotlinux/asdf-lazypodman.git

For Install / Upgrade

asdf list all lazypodman
asdf install lazypodman latest
asdf global lazypodman latest

Binary Release (Linux/OSX/Windows)

You can manually download a binary release from the release page.

Automated install/update, don't forget to always verify what you're piping into bash:

curl https://raw.githubusercontent.com/christophe-duc/lazypodman/master/scripts/install_update_linux.sh | bash

The script installs downloaded binary to $HOME/.local/bin directory by default, but it can be changed by setting DIR environment variable.

Go

Required Go Version >= 1.19

go install github.com/christophe-duc/lazypodman@latest

Required Go version >= 1.8, <= 1.17

go get github.com/christophe-duc/lazypodman

Arch Linux AUR

You can install lazypodman using the AUR by running:

yay -S lazypodman

Podman Container

  1. Click if you have an ARM device

    • If you have a ARM 32 bit v6 architecture

      podman build -t lazypodman \
      --build-arg BASE_IMAGE_BUILDER=arm32v6/golang \
      --build-arg GOARCH=arm \
      --build-arg GOARM=6 \
      https://github.com/christophe-duc/lazypodman.git
      
    • If you have a ARM 32 bit v7 architecture

      podman build -t lazypodman \
      --build-arg BASE_IMAGE_BUILDER=arm32v7/golang \
      --build-arg GOARCH=arm \
      --build-arg GOARM=7 \
      https://github.com/christophe-duc/lazypodman.git
      
    • If you have a ARM 64 bit v8 architecture

      podman build -t lazypodman \
      --build-arg BASE_IMAGE_BUILDER=arm64v8/golang \
      --build-arg GOARCH=arm64 \
      https://github.com/christophe-duc/lazypodman.git
      

  2. Run the container

    # Rootful Podman
    podman run --rm -it \
    -v /run/podman/podman.sock:/run/podman/podman.sock:ro \
    -v /yourpath:/.config/lazypodman \
    ghcr.io/christophe-duc/lazypodman
    
    # Rootless Podman
    podman run --rm -it \
    -v $XDG_RUNTIME_DIR/podman/podman.sock:/run/podman/podman.sock:ro \
    -v /yourpath:/.config/lazypodman \
    ghcr.io/christophe-duc/lazypodman
    
    • Don't forget to change /yourpath to an actual path you created to store lazypodman's config

    • You can also use this podman-compose.yml

    • You might want to create an alias, for example:

      echo "alias lzd='podman run --rm -it -v \$XDG_RUNTIME_DIR/podman/podman.sock:/run/podman/podman.sock:ro -v /yourpath/config:/.config/lazypodman ghcr.io/christophe-duc/lazypodman'" >> ~/.zshrc
      

For development, you can build the image using:

git clone https://github.com/christophe-duc/lazypodman.git
cd lazypodman
podman build -t lazypodman \
    --build-arg BUILD_DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"` \
    --build-arg VCS_REF=`git rev-parse --short HEAD` \
    --build-arg VERSION=`git describe --abbrev=0 --tag` \
    .

Manual

You'll need to install Go

git clone https://github.com/christophe-duc/lazypodman.git
cd lazypodman
go install

You can also use go run main.go to compile and run in one go (pun definitely intended)

Usage

Call lazypodman in your terminal. I personally use this a lot so I've made an alias for it like so:

echo "alias lzd='lazypodman'" >> ~/.zshrc

(you can substitute .zshrc for whatever rc file you're using)

  • Basic video tutorial here.
  • List of keybindings here.

Cool features

everything is one keypress away (or one click away! Mouse support FTW):

  • viewing the state of your Podman or podman-compose container environment at a glance
  • viewing logs for a container/service
  • viewing ascii graphs of your containers' metrics so that you can not only feel but also look like a developer
  • customising those graphs to measure nearly any metric you want
  • attaching to a container/service
  • restarting/removing/rebuilding containers/services
  • viewing the ancestor layers of a given image
  • pruning containers, images, or volumes that are hogging up disk space

Contributing

There is still a lot of work to go! Please check out the contributing guide. For contributor discussion about things not better discussed here in the repo, join the discord channel

Donate

If you would like to support the development of lazypodman, consider sponsoring me (github is matching all donations dollar-for-dollar for 12 months)

Social

If you want to see what I (Jesse) am up to in terms of development, follow me on twitter or watch me program on twitch

FAQ

How do I edit my config?

By opening lazypodman, clicking on the 'project' panel in the top left, and pressing 'o' (or 'e' if your editor is vim). See Config Docs

How do I get text to wrap in my main panel?

In the future I want to make this the default, but for now there are some CPU issues that arise with wrapping. If you want to enable wrapping, use gui.wrapMainPanel: true

How do you select text?

Because we support mouse events, you will need to hold option while dragging the mouse to indicate you're trying to select text rather than click on something. Alternatively you can disable mouse events via the gui.ignoreMouseEvents config value.

Mac Users: See Issue #190 for other options.

Why can't I see my container's logs?

By default we only show logs from the last hour, so that we're not putting too much strain on the machine. This may be why you can't see logs when you first start lazypodman. This can be overwritten in the config's commandTemplates

If you are running lazypodman in a Podman container, it is a known bug that you can't see logs or CPU usage.

Alternatives

  • lazydocker - The original project this was forked from, for Docker users.
  • podman-tui - Another terminal UI for Podman from the Containers project.
  • Portainer - Portainer tries to solve the same problem but it's accessed via your browser rather than your terminal.
  • See Awesome Podman list for similar tools to work with Podman.