Skip to content
Search Fedora

    Browse this documentation

    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.

    Terminal window
    podman version
    podman info --format "{{.Host.Security.Rootless}} {{.Store.GraphDriverName}} {{.Version.Version}}"
    Client: Podman Engine
    Version: 6.1.0
    API Version: 6.1.0
    Go Version: go1.27rc2-X:nodwarf5
    Build Origin: Fedora Project
    OS/Arch: linux/amd64
    true overlay 6.1.0

    Those 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.

    rootless is not a “degraded mode”; it uses a user namespace to map container root onto your ordinary user:

    Terminal window
    id -u
    podman unshare cat /proc/self/uid_map
    1000
    0 1000 1
    1 524288 65536

    Read 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:

    Terminal window
    podman info --format "{{.Store.GraphRoot}}"
    /home/labuser/.local/share/containers/storage

    Only rootful uses /var/lib/containers/storage. When “I pulled an image but cannot see it”, check which mode you are in first.

    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):

    Terminal window
    mkdir -p ~/.config/containers/systemd
    cat > ~/.config/containers/systemd/hello.container <<'EOF'
    [Unit]
    Description=Hello container
    [Container]
    Image=registry.fedoraproject.org/fedora-minimal:45
    Exec=sleep infinity
    [Install]
    WantedBy=default.target
    EOF

    Step two, let systemd see it:

    Terminal window
    systemctl --user daemon-reload
    systemctl --user list-unit-files "hello*"
    UNIT FILE STATE PRESET
    hello.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:

    Terminal window
    systemctl --user start hello.service
    podman ps --format "{{.Names}} {{.Status}}"
    systemd-hello Up 1 second

    The container name is systemd-hello — Quadlet derives it from the unit name.

    SymptomCauseFix
    Unit hello.service not foundno daemon-reload, or the file is not in ~/.config/containers/systemd/check path and extension, then reload
    the container stops when SSH exitsuser-level systemd dies with the sessionloginctl enable-linger $USER
    image pulled but podman images is emptyone is rootless (home dir), the other rootful (/var/lib)run everything as the same user
    Terminal window
    loginctl enable-linger $USER # keep user services running after logout
    1. podman version to confirm 6.1, podman info for the backend;
    2. podman ps -a to confirm old containers are still there and still start;
    3. rewrite every file produced by podman generate systemd as a Quadlet (.container);
    4. daemon-reload and start each one, confirming the unit state is generated rather than static.