If you've run podman generate systemd recently, you've seen the deprecation warning. It's not going away tomorrow, it still ships and gets urgent bug fixes, but no new features are landing on it. The ecosystem has moved on to Quadlet, and it's been the recommended path since Podman 4.4, which already shipped to CentOS Stream and Fedora. This isn't bleeding edge, it's just new to you.
What a Quadlet actually is
A Quadlet is a small text file that looks like a systemd unit but uses Podman's shorthand syntax. Drop a .container file in the right directory, run daemon-reload, and systemd's Podman generator builds the real .service unit for you on the fly. You never touch the generated service directly, you edit the Quadlet and reload. That's the whole design: when Podman's defaults change, your generated service updates with it instead of silently drifting.
Why one compose file becomes several unit files
Take a typical two-service stack, a Caddy web server in front of Postgres, on a shared network, with a named volume. In Quadlet land that's not one file, it's a .container for each service, a .volume for the data, and a .network for them to actually talk to each other. Skip that network unit and your containers land on separate default networks with no way to reach each other, a mistake that's easy to make if you're leaning on an auto-converter.
There's also a real gotcha around depends_on: it doesn't map to a single line, you need both Requires= and After= in the [Unit] section to replicate what compose was doing for you automatically.
I break down the full conversion, service by service, plus rootful vs rootless tradeoffs and where the podlet tool falls short, here:
https://devencyclopedia.com/blog/docker-compose-to-podman-quadlet
Top comments (0)