systemctl --user start uptime-kuma.service

Podman Quadlet Generator

Describe the container once and get a Quadlet file that systemd turns into a real service, with logs in journalctl, restarts on failure, and start at boot.

Quadlet units are generated, not enabled

Podman reads .container files at daemon-reload and generates a normal .service unit from each. Because that unit is generated, systemctl enable does not work on it; the [Install] section in the .container file is what makes it start at boot. After any change, run daemon-reload and restart the service. For rootless containers to start at boot without you logging in, enable lingering for the user once with loginctl enable-linger.

Run containers as systemd services with Quadlet

This generator writes Podman Quadlet .container files, the replacement for the deprecated podman generate systemd. It fills in the [Container] section with Image, ContainerName, PublishPort, Volume with the :Z SELinux relabel option, Environment, Network, Exec, and AutoUpdate=registry for podman auto-update, plus a [Service] restart policy and an [Install] target that matches rootless or rootful mode. It also prints where to save the file, the dry-run command that shows the generated unit, and the systemctl commands to start it.

Quadlet FAQ

Where do Quadlet files go?

Rootless units go in ~/.config/containers/systemd/ and are managed with systemctl --user. Rootful units go in /etc/containers/systemd/ and are managed with plain sudo systemctl. Subdirectories are allowed in both.

What does :Z do on a volume?

On SELinux systems such as Fedora and RHEL, :Z relabels the host directory so only this container may use it, and :z relabels it for sharing between containers. Without one, SELinux blocks access and the container sees permission denied. On systems without SELinux the option is harmless.

How do automatic updates work?

With AutoUpdate=registry, running podman auto-update, or enabling podman-auto-update.timer, pulls newer images for the same tag and restarts the containers that use them, rolling back if the new container fails to start. Use a specific tag rather than latest so updates stay within a version you trust.

Can Quadlet run multi-container apps?

Yes. Create a .network file and reference it with Network= in each .container so they can reach each other by name, or group them in a .pod file. Quadlet also supports .volume, .kube, .image, and .build units.