Podman cheat sheet
This is a cheat sheet of podman useful information and commands (updated in August 2025).
Podman is feature equivalent with docker, with the advantage of not requiring root privileges and a daemon running as root.
It’s also well integrated with systemd.
Podman can be used alongside with buildah to build container images, and skopeo to manage container images in a registry.
Install podman
- Install the package:
apt install podman - Allow for unqualified search in the docker.io and quay.io repositories:
echo 'unqualified-search-registries=["docker.io", "quay.io"]' > $HOME/.config/containers/registries.conf - Enable the auto-update timer:
systemctl [--user] enable --now podman-auto-update.timer
Image management
- List pulled images:
podman image ls - Show the history of an image:
podman image history <image name> - Retrieve or update an image:
podman image pull <image name>Do not forget to restart the containers using this image to use the updated version. - Retrieve a specific image version:
podman pull <image name>:<version|latest>
Get information about running containers
- List running containers:
podman ps - List all containers:
podman ps -a - Sort all containers by size:
podman ps --size --sort size - Sort all containers by creation time:
podman ps --sort created - List with a customized format:
podman ps --all --format "{{.Names}} {{.Ports}} {{.Mounts}} {{.Status}}" - Live resource information by container:
podman stats
Control a container
- Create a new container and detach it:
podman run -dt <image name> - Create a new container and get an interactive shell:
podman run -it <image name> - Create a new container and map a directory:
-v <host directory>:<container mount point> - Create a new container and map a network port:
-p <host port>:<container port> - Enable Auto-update:
--label io.containers.autoupdate=registry - Checking for updates:
podman auto-update - Copy a file to a container:
podman cp <src> <dest> - Get an interactive shell inside a running container:
podman exec -it <CONTAINER ID> /bin/bash podman [restart,start,stop,pause,unpause] <CONTAINER ID>- Remove a container:
podman rm <CONTAINER ID>
Configuration generation
Kube definition file
- Generate a kube file:
podman generate kube <CONTAINER ID> > <filename>.yaml - Import a kube file:
podman play kube <filename>.yaml
Compose
Podman is compatible with docker compose, install the package named podman-compose and create a file named compose.yaml, as an example:
services:
intel-llm:
image: docker.io/intelanalytics/ipex-llm-inference-cpp-xpu:latest
container_name: intel-llm
devices:
- /dev/dri
volumes:
- intel-llm:/root/.ollama/models
ports:
- "127.0.0.1:11434:11434"
environment:
- HOSTNAME=intel-llm
- no_proxy=localhost,127.0.0.1
- OLLAMA_HOST=0.0.0.0
- OLLAMA_NUM_GPU=999
- ZES_ENABLE_SYSMAN=1
- OLLAMA_INTEL_GPU=true
restart: unless-stopped
command: sh -c 'mkdir -p /llm/ollama && cd /llm/ollama && init-ollama && exec ./ollama serve'
openwebui:
image: ghcr.io/open-webui/open-webui:main
container_name: openwebui
volumes:
- open-webui:/app/backend/data
ports:
- "127.0.0.1:3000:8080"
environment:
- OLLAMA_BASE_URL=http://intel-llm:11434
- WEBUI_AUTH=False
restart: unless-stopped
volumes:
intel-llm:
open-webui:
In the same directory:
- Start all containers, and detach:
podman compose up -d - Stop all containers:
podman compose down - Start or stop individual services:
podman compose [start|stop] - List all running containers:
podman compose ps - Get the last logs of the containers:
podman compose logs -f
Quadlet
Configuration directories:
/usr/share/containers/systemd//etc/containers/systemd/~/.config/containers/systemd(rootless)
Create a container file:
[Unit]
Description=HTTPD server
After=local-fs.target
[Container]
Image=docker.io/library/httpd:latest
AutoUpdate=registry
#Exec=sleep 1000
PublishPort=8080:80 # Port mapping
Volume=%h/public:/var/www/ # %h is mapped to the user home dir
Environment=ENV=prod # Environment variable
[Install]
# Start by default on boot
WantedBy=multi-user.target default.target
Before podman version 5.6.0, and copy the file manually in .config/containers/systemd/httpd.container.
Starting podman version 5.6.0, do not edit ~/.config/containers/systemd manually, use podman quadlet to manage the quadlet files:
- Install a quadlet file:
podman quadlet install httpd.container - Remove a quadlet file:
podman quadlet rm httpd.container - Print the content of a quadlet file:
podman quadlet print httpd.containerorsystemctl [--user] cat <quadlet name> - List installed quadlets:
podman quadlet list
Manage the quadlet as a systemd service:
- Reload and scan for local changes:
systemctl [--user] daemon-reload - Validate the quadlet files:
/usr/lib/podman/quadlet -dryrun --user - Start the container:
systemctl [--user] start <quadlet name> - Enable and start the container:
systemctl [--user] enable --now <quadlet name>
Clean-up
Clean-up the system of unused files (use with caution): podman system prune -a [--volumes]
External Resources
- https://linuxhandbook.com/podman-add-delete-containers/
- https://www.redhat.com/sysadmin/create-containers-podman-quickly
- https://www.redhat.com/sysadmin/container-information-podman
- https://www.redhat.com/sysadmin/update-container-images-podman
- https://developers.redhat.com/blog/2019/01/15/podman-managing-containers-pods
- https://www.redhat.com/sysadmin/podman-auto-updates-rollbacks
- https://linuxhandbook.com/autostart-podman-containers/
- https://mo8it.com/blog/quadlet/
- https://linuxconfig.org/how-to-run-podman-containers-under-systemd-with-quadlet
- https://wiki.archlinux.org/title/Podman