Blog post

Declarative Containers with systemd and Podman Quadlet

Quadlet turns simple .container files into real systemd units. Write intent, not generated boilerplate, and let Podman’s generator keep services current after every daemon-reload.

An editorial illustration of declarative container management showing systemd unit configuration files and Quadlet service definitions alongside server monitoring indicators, rendered in deep blues and warm terminal highlights.

Quadlet lets you declare Podman containers as native systemd units. Instead of running podman generate systemd on a live container or gluing together brittle Compose + systemd files, you write a short .container file. Podman’s generator (/usr/libexec/podman/quadlet) reads it at boot or after daemon-reload and produces a regular .service you manage with systemctl.

Place the file at /etc/containers/systemd/app.container (rootful) or ~/.config/containers/systemd/app.container (rootless). Add an [Install] section with WantedBy=multi-user.target so the service starts on boot. Then run systemctl daemon-reload && systemctl start app.service.

Named volumes and networks are also first-class units. Declare appdata.volume and appnet.network, then reference them from the container file with Volume=appdata.volume:/data and Network=appnet.network. The generator provisions the dependencies automatically.

Key caveats: cgroup v2 is required, generated services are transient (use WantedBy, not enable), and rootless mode cannot use systemd User= directives. For long image pulls set TimeoutStartSec=900 in the [Service] section. Debug syntax errors with systemd-analyze --user --generators=true verify app.service.

Quadlet replaces ad-hoc container-to-systemd glue with portable, intent-only configuration that upgrades automatically when Podman fixes land. It is the cleanest way to run single-node container services on any modern Linux box.

Related areas

These What I Do pages are matched from the subject matter of this article, creating a cleaner path from educational content to implementation work.

Continue reading

Based on shared categories first, then the strongest overlap in tags.