#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>