Docker Compose und Rootless systemd: User Services und linger

Die Kombination von Docker Compose mit Rootless Systemd eröffnet die Möglichkeit, Container-Stacks als unprivilegierte User-Services zu betreiben. Dadurch lassen sich Compose-Anwendungen ohne Root-Rechte starten, überwachen und automatisch beim Benutzer-Login oder systemweit per linger-Funktion laufen lassen. Dies verbessert Sicherheit, Isolation und Flexibilität in Multi-User-Umgebungen.

1. Vorteile von Rootless Systemd mit Compose

Rootless Systemd erlaubt es, Compose-Stacks vollständig unter einem unprivilegierten Benutzer zu betreiben:

  • Keine Root-Rechte: Reduziert Sicherheitsrisiken auf dem Host.
  • Per-User Services: Jeder Benutzer kann eigene Stacks starten und verwalten.
  • Linger: Dienste laufen auch ohne aktive Login-Sitzung weiter.
  • Integration in journald: Logs bleiben konsistent und zentral zugänglich.

2. Voraussetzungen für Rootless Docker

  • Docker >= 20.x installiert mit Rootless-Modus
  • Systemd User-Units aktiviert
  • Benutzer hat die nötigen Rechte für ~/.config/systemd/user und ~/.local/bin
  • Optional: Podman oder Rootless BuildKit für alternative Builds

3. Compose-Projekt als User-Service einrichten

Das Compose-Verzeichnis sollte dem Benutzer gehören, z. B. ~/projects/myapp/. Ein Systemd-Unit-File für den User wird in ~/.config/systemd/user/myapp.service erstellt:

[Unit]
Description=MyApp Compose Stack (User Service)
After=network.target docker.socket

[Service]
WorkingDirectory=/home/username/projects/myapp
ExecStart=/usr/local/bin/docker-compose up
ExecStop=/usr/local/bin/docker-compose down
Restart=always
TimeoutStartSec=0

[Install]
WantedBy=default.target

Erklärung

  • WorkingDirectory: Pfad zum Compose-Projekt
  • ExecStart / ExecStop: Start- und Stop-Befehle für Compose
  • Restart: Automatisches Neustarten bei Fehlern
  • WantedBy: Ziel für User-Systemd

4. Linger aktivieren

Mit Linger laufen User-Services auch ohne aktive Login-Sitzung:

# Aktivieren für Benutzer "username"
loginctl enable-linger username

Damit startet der User-Service beim Systemstart und kann unabhängig von der interaktiven Sitzung laufen.

5. Systemd User-Service steuern

Nach Erstellung der Unit-Datei lassen sich Compose-Stacks über die User-Systemd-Befehle verwalten:

# Aktivieren für automatischen Start
systemctl --user enable myapp.service

Starten des Compose-Stacks

systemctl --user start myapp.service

Stoppen des Compose-Stacks

systemctl --user stop myapp.service

Status prüfen

systemctl --user status myapp.service

Logs live verfolgen

journalctl --user-unit myapp.service -f

6. Healthchecks und Restart Policies

Compose-Healthchecks lassen sich nahtlos mit Systemd Restart-Policies kombinieren:

  • Healthcheck definieren: docker-compose.yml mit healthcheck:
  • Systemd Restart: Restart=on-failure oder Restart=always
  • Timeouts: TimeoutStartSec verhindert Endlosschleifen beim Starten

7. Update-Strategie für Rootless Stacks

Um Images zu aktualisieren, empfiehlt sich folgender Ablauf:

# Stoppen des Services
systemctl --user stop myapp.service

Pull neuer Images

cd ~/projects/myapp
docker-compose pull

Starten des Services

systemctl --user start myapp.service

Dies stellt sicher, dass während des Updates keine Downtime für andere User-Services auftritt.

8. Logging und Debugging

Alle Logs werden über journald gesammelt, wodurch Debugging deutlich einfacher wird:

# Logs anzeigen
journalctl --user-unit myapp.service

Echtzeit Logs

journalctl --user-unit myapp.service -f

Tipps

  • Separate Volumes für Logs und Daten verwenden
  • Healthcheck-Failures regelmäßig überwachen
  • Rootless Docker lässt sich mit docker context auf verschiedene Umgebungen umschalten

9. Security-Benefits

Rootless Systemd reduziert Angriffsflächen deutlich:

  • Keine Root-Rechte für Compose-Stacks
  • Isolierte User-Namespace für Container
  • Systemd-Sandboxing (PrivateTmp, ProtectSystem) kann zusätzlich genutzt werden
  • Reduziert Risiko von unbeabsichtigten Host-Veränderungen durch Container

10. Best Practices

  • Jedes Compose-Projekt als eigenen User-Service anlegen
  • Linger aktivieren, um Stack unabhängig von Login laufen zu lassen
  • Healthchecks in docker-compose.yml definieren
  • Separate Logging- und Datenvolumes nutzen
  • Regelmäßige Updates und Image-Pulls über kontrollierten Ablauf durchführen
  • Unit-Dateien versionieren, z. B. über Git

11. Zusammenfassung

Die Kombination von Docker Compose und Rootless Systemd bietet eine robuste, sichere und flexible Möglichkeit, Multi-Container-Anwendungen als User-Services zu betreiben. Mit Linger, Healthchecks, Restart-Policies und systemd-basiertem Logging werden Stacks zuverlässig und unabhängig von interaktiven Sessions ausgeführt, was die Produktivumgebung stabiler und sicherer macht.

Konfiguriere Cisco Router & Switches und liefere ein Packet-Tracer-Lab/GNS3

Ich biete professionelle Unterstützung im Bereich Netzwerkkonfiguration und Network Automation für private Anforderungen, Studienprojekte, Lernlabore, kleine Unternehmen sowie technische Projekte. Ich unterstütze Sie bei der Konfiguration von Routern und Switches, der Erstellung praxisnaher Topologien in Cisco Packet Tracer, dem Aufbau und Troubleshooting von GNS3- und EVE-NG-Labs sowie bei der Automatisierung von Netzwerkaufgaben mit Netmiko, Paramiko, NAPALM und Ansible. Kontaktieren Sie mich jetzt – klicken Sie hier.

Meine Leistungen umfassen:

  • Professionelle Konfiguration von Routern und Switches

  • Einrichtung von VLANs, Trunks, Routing, DHCP, NAT, ACLs und weiteren Netzwerkfunktionen

  • Erstellung von Topologien und Simulationen in Cisco Packet Tracer

  • Aufbau, Analyse und Fehlerbehebung von Netzwerk-Labs in GNS3 und EVE-NG

  • Automatisierung von Netzwerkkonfigurationen mit Python, Netmiko, Paramiko, NAPALM und Ansible

  • Erstellung von Skripten für wiederkehrende Netzwerkaufgaben

  • Dokumentation der Konfigurationen und Bereitstellung nachvollziehbarer Lösungswege

  • Konfigurations-Backups, Optimierung bestehender Setups und technisches Troubleshooting

Benötigen Sie Unterstützung bei Ihrem Netzwerkprojekt, Ihrer Simulation oder Ihrer Network-Automation-Lösung? Kontaktieren Sie mich jetzt – klicken Sie hier.

Related Articles