#Podman
#Debian
Podman Rootless Container automatisch starten
Mit Podman ist es sehr einfach als normaler User Container zu starten. In Debian Bookworm funktioniert das “out of the box” wenn podman installiert ist.
Da podman keinen Daemon hat der im Hintergrund läuft, werden Container nicht automatisch nach einem Reboot gestartet. Dafür muss man selber einen Systemd Service anlegen. Damit das auch für Container, die ein Non-Root User startet funktioniert, ist eine kleine extra Konfig erforderlich.
Container als Non-Root User starten
marcel@wega:~$ podman run --name apache -d -p 8080:80 docker.io/library/httpd
Trying to pull docker.io/library/httpd:latest...
Getting image source signatures
Copying blob 0127b4d49ca0 done
Copying blob 01b5b2efb836 done
Copying blob 831122b282b9 done
Copying blob 1a6abe5420b4 done
Copying blob 36fa1415f90a done
Copying config 81a1863c7b done
Writing manifest to image destination
Storing signatures
fc3846d454fcad1c73542f477a837a18112fa8a5e60807f2938a14bbc19f28e1
marcel@wega:~$ curl localhost:8080
<html><body><h1>It works!</h1></body></html>
Wenn man sich nun auslogged oder rebootet läuft der Container nicht mehr.
marcel@wega:~$ curl localhost:8080
curl: (7) Failed to connect to localhost port 8080 after 4 ms: Couldn't connect to server
Container als Non-Root User automatisch starten
Um den Container automatisch zu starten, müssen wir ein Systemd Service File anlegen und enablen. Praktischerweise bringt Podman eine Option mit, um dieses Service File automatisch zu generieren.
marcel@wega:~$ mkdir -p .config/systemd/user/
marcel@wega:~$ podman generate systemd --restart-policy=always apache > .config/systemd/user/apache.service
marcel@wega:~$ systemctl --user enable apache.service
Created symlink /data/home/marcel/.config/systemd/user/default.target.wants/apache.service → /data/home/marcel/.config/systemd/user/apache.service.
Wenn wir nun rebooten und wieder anmelden wird der Container automatisch wieder gestartet.
marcel@wega:~$ curl localhost:8080
<html><body><h1>It works!</h1></body></html>
Auf den ersten Blick wäre die Aufgabe damit erfüllt. Wenn wir uns nun als ein anderer User anmelden sehen wir, dass der Container trotz Systemd Service File nicht läuft.
root@wega:~# curl localhost:8080
curl: (7) Failed to connect to localhost port 8080 after 0 ms: Couldn't connect to server
Das liegt daran, dass in Debian Bookworm Systemd User Services nicht gestartet werden, wenn der User nicht eingeloggt ist.
Non-Root User Container auch starten wenn der User nicht angemeldet ist
Um Systemd User Services auch ohne Login zu starten, muss das mit dem loginctl
so konfiguriert werden.
root@wega:~# loginctl enable-linger marcel
Nach einem Reboot läuft der Container nun auch wenn der Non-Root User nicht angemeldet ist.
root@wega:~# curl localhost:8080
<html><body><h1>It works!</h1></body></html>