Podman 6 in Fedora 45: version, rootless and Quadlet in practice
Fedora 45 moves the container stack to Podman 6.1 (official ChangeSet: Podman 6). Command shapes are largely unchanged; two things genuinely affect migration: the API version jumped a major release, and podman generate systemd is now formally deprecated.
The output below comes from F45.
Version and backend first
Section titled “Version and backend first”podman versionpodman info --format "{{.Host.Security.Rootless}} {{.Store.GraphDriverName}} {{.Version.Version}}"Client: Podman EngineVersion: 6.1.0API Version: 6.1.0Go Version: go1.27rc2-X:nodwarf5Build Origin: Fedora ProjectOS/Arch: linux/amd64
true overlay 6.1.0Those three values are rootless or not, storage driver, and server version. API Version leaps to 6.1 with Version — scripts calling the API must check fields against it.
The rootless uid mapping
Section titled “The rootless uid mapping”rootless is not a “degraded mode”; it uses a user namespace to map container root onto your ordinary user:
id -upodman unshare cat /proc/self/uid_map1000 0 1000 1 1 524288 65536Read it as: container uid 0 → host uid 1000; container uids 1–65536 → a host range starting at 524288. That is why container root cannot touch host root files — it is not host root at all.
Storage follows into your home directory:
podman info --format "{{.Store.GraphRoot}}"/home/labuser/.local/share/containers/storageOnly rootful uses /var/lib/containers/storage. When “I pulled an image but cannot see it”, check which mode you are in first.
Quadlet: hand containers to systemd (the recommended route)
Section titled “Quadlet: hand containers to systemd (the recommended route)”On F45, podman generate systemd prints a deprecation notice outright:
DEPRECATED command:It is recommended to use Quadlets for running containers and pods under systemd.The replacement is Quadlet. Full flow:
Step one, write the unit (the extension is .container, not .service):
mkdir -p ~/.config/containers/systemdcat > ~/.config/containers/systemd/hello.container <<'EOF'[Unit]Description=Hello container
[Container]Image=registry.fedoraproject.org/fedora-minimal:45Exec=sleep infinity
[Install]WantedBy=default.targetEOFStep two, let systemd see it:
systemctl --user daemon-reloadsystemctl --user list-unit-files "hello*"UNIT FILE STATE PRESEThello.service generated -generated is the point: Quadlet turns .container into .service during daemon-reload, and you never write the service file.
Step three, start and confirm:
systemctl --user start hello.servicepodman ps --format "{{.Names}} {{.Status}}"systemd-hello Up 1 secondThe container name is systemd-hello — Quadlet derives it from the unit name.
Three things people trip on
Section titled “Three things people trip on”| Symptom | Cause | Fix |
|---|---|---|
Unit hello.service not found | no daemon-reload, or the file is not in ~/.config/containers/systemd/ | check path and extension, then reload |
| the container stops when SSH exits | user-level systemd dies with the session | loginctl enable-linger $USER |
image pulled but podman images is empty | one is rootless (home dir), the other rootful (/var/lib) | run everything as the same user |
loginctl enable-linger $USER # keep user services running after logoutPost-upgrade checklist
Section titled “Post-upgrade checklist”podman versionto confirm 6.1,podman infofor the backend;podman ps -ato confirm old containers are still there and still start;- rewrite every file produced by
podman generate systemdas a Quadlet (.container); daemon-reloadand start each one, confirming the unit state isgeneratedrather thanstatic.
Related pages
Section titled “Related pages”- Fedora containers and rootless — the toolchain and SELinux
- Isolated development with Toolbox — containers on the development side
- Cheat sheet — everyday podman commands
- Fedora 45: changes, download and upgrade — the six changes at a glance
- Official: Fedora 45 ChangeSet