When you use Podman directly from the command line, it operates only as long as you are actively using the terminal session. Podman-managed containers will cease to run once you close the session. This behavior isn't suitable for your requirement of having a Podman-based service remain functional even after system restarts. This is where integrating Podman with systemd comes into play.
Refer this doc here :https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html-single/building_runnin...
For a privileged user - It is easy to play with systemd service , let us see the same for a basic user ( because we want this user account to start a service that persists over logouts/ reboot ) :
1. You need to have that basic user present in the system , if not create the user with useradd command.
2. Login with the user and run the command : podman version ( just to test podman command)
3. Now, we have to inform systemd to keep the managed container running and automatically start when the system boots up / even after the user who started it logs out.
For this, we use loginctl command ( This we have to do it as root user ) ( https://www.freedesktop.org/software/systemd/man/latest/loginctl.html )
#loginctl show-user <username> | grep ^Linger
If Linger=no then enable the lingering using :
#loginctl enable-linger <username>
4. Now as that user : create / run the container from the image ( as you generally do with persistent volume )
a. podman pull registry.redhat.io/xxx
b. podman images ls
c. podman run -d --name=<name> -p 8080:80 -v /pathinhostvm:/pathincontainer:Z <image>
d. podman ps
5. Now the persistent configuration with systemd will be done ( for the non privileged user that we created in step 1):
We will use podman to do our work : https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html-single/building_runnin...
as that user :
a. #mkdir -p ~/.config/systemd/user ( You could also use the /etc/systemd/system directory, but only a privileged user can copy the systemd service file to this directory, hence we are not using that dir)
b. #podman generate systemd --new --name <containername> --files
refer : podman generate systemd --help for all parameters available or https://docs.podman.io/en/latest/markdown/podman-generate-systemd.1.html
The generated systemd service unit file will contain instructions for how to start, stop, and manage the container.
The Restart=on-failure line sets the restart policy and instructs systemd to restart when the service cannot be started or stopped cleanly, or when the process exits non-zero.
The ExecStart line describes how we start the container.
The ExecStop line describes how we stop and remove the container.
c. #cp -Z <containername>.service ~/.config.systemd/user/ ( copying a unit file to $HOME/.config/systemd/user and enabling it marks the unit file to be automatically started on user login)
d. You can check the generated systemd unit file using #cat ~/.config.systemd/user/container-name.service
e. #systemctl --user daemon-reload (Reload the user systemd service to use the new service unit)
f. #systemctl --user enable --now <containername>.service
g. #systemctl --user enable <containername>.service
h. #systemctl --user status <containername>.service
That is it !!
When you do not need this service : just disable it and stop it like any service units.
Refer Ch14s05 in RH134v9 course for practise.
Excellent and very handy info, thank you for sharing @Chetan_Tiwary_
Red Hat
Learning Community
A collaborative learning environment, enabling open source skill development.