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.