Rootless Docker einrichten - Container ohne Root-Rechte betreiben
Rootless Docker einrichten - Container ohne Root-Rechte betreiben
Rootless Docker lässt den Daemon als normaler Benutzer laufen – ein Container-Escape führt so maximal zu einem kompromittierten Benutzeraccount, nicht zum Root-Zugriff.
Was Rootless Docker bedeutet
Im normalen Betrieb läuft dockerd als root und verwaltet Namespaces, Netzwerke und Mounts mit vollen Systemrechten. Im Rootless-Modus läuft der gesamte Daemon als unprivilegierter Benutzer. Der Container-Prozess, der im Container „root" ist, ist auf dem Host ein normaler User.
Installation
# Voraussetzungen
apt-get install -y uidmap dbus-user-session
# Rootless-Setup-Skript ausführen (als normaler User, nicht root)
dockerd-rootless-setuptool.sh install
Falls das Skript nicht vorhanden ist:
curl -fsSL https://get.docker.com/rootless | sh
Konfiguration
Nach der Installation läuft der Daemon unter dem eigenen Benutzeraccount:
# Socket-Pfad ist benutzerspezifisch
export DOCKER_HOST=unix:///run/user/1000/docker.sock
# In .bashrc oder .zshrc eintragen
echo 'export DOCKER_HOST=unix:///run/user/$(id -u)/docker.sock' >> ~/.bashrc
Systemd User-Service
# Daemon starten
systemctl --user start docker
# Autostart aktivieren
systemctl --user enable docker
# Damit der Daemon läuft wenn kein User eingeloggt ist (Linger aktivieren)
sudo loginctl enable-linger $USER
Ports unter 1024
Im Rootless-Modus darf ein normaler Benutzer keine Ports unter 1024 öffnen. Zwei Lösungen:
# Option 1: Kernel-Parameter setzen (als root)
echo 'net.ipv4.ip_unprivileged_port_start=80' >> /etc/sysctl.conf
sysctl -p
# Option 2: Port-Forwarding auf Host-Ebene mit socat oder iptables
Einschränkungen
Rootless Docker hat einige Features nicht oder nur eingeschränkt:
| Feature | Status |
|---|---|
| Overlay-Netzwerke (Swarm) | Nicht verfügbar |
| GPU-Zugriff (NVIDIA) | Eingeschränkt |
| --cap-add NET_ADMIN | Eingeschränkt |
| AppArmor-Profile | Teilweise |
| Storage-Driver | fuse-overlayfs statt overlay2 |
Für die meisten Einzel-Host-Setups mit Compose sind diese Einschränkungen kein Problem.
Mehrere User auf einem Server
Das ist der Hauptanwendungsfall: mehrere Entwickler oder Dienste auf einem gemeinsamen Server, jeder mit eigenem Docker-Daemon. Kein User kann Container des anderen beeinflussen.
# User1 nutzt seinen eigenen Daemon
sudo -u user1 DOCKER_HOST=unix:///run/user/1001/docker.sock docker ps
# User2 nutzt seinen eigenen Daemon
sudo -u user2 DOCKER_HOST=unix:///run/user/1002/docker.sock docker ps
Datenpfad
Rootless Docker speichert alles unter dem Benutzer:
~/.local/share/docker/ # Statt /var/lib/docker/
Das ist relevant für Backups und Disk-Quota-Berechnungen.
Bestehende Installation entfernen
dockerd-rootless-setuptool.sh uninstall
Weiterführend
Rootless Docker setzt Grundwissen über Linux-Benutzerverwaltung und User-Namespaces voraus. Hintergrundartikel zu Linux-Administration gibt es auf nolr.nexon.cyou.