Proxmox: Docker im LXC-Container oder in einer VM?
Docker unter Proxmox VE 9.2: wann ein LXC-Container reicht, warum eine VM meist die bessere Wahl ist und wie Du die Docker-VM richtig einrichtest.
Von Nathan Base
Wer einen Mini-PC mit Proxmox betreibt, stellt sich spätestens beim ersten Docker-Dienst die Frage: Lege ich dafür einen LXC-Container an oder eine virtuelle Maschine? In Foren findest Du für beide Seiten leidenschaftliche Anhänger. Die einen schwören auf LXC, weil es kaum Ressourcen braucht, die anderen auf VMs, weil sie stabiler laufen.
Die kurze Antwort: Für Docker nimmst Du eine VM. Das empfiehlt Proxmox selbst, und für die meisten Heimserver ist der Mehrverbrauch an Ressourcen kleiner als der Ärger, den Du Dir sparst. Es gibt aber Fälle, in denen LXC tatsächlich die bessere Wahl ist. Dieser Artikel erklärt, wann welcher Weg passt, und zeigt dann, wie Du eine Docker-VM sauber einrichtest.
Stand ist Proxmox VE 9.2 auf Basis von Debian 13. Die Aussagen zu Containern stützen sich auf das offizielle Proxmox-Handbuch zu Linux-Containern.
Der Unterschied in einem Absatz
Eine VM ist ein vollständiger virtueller Computer mit eigenem Kernel. Proxmox stellt ihr virtuelle Hardware bereit, und darin läuft ein normales Debian oder Ubuntu. Ein LXC-Container teilt sich dagegen den Kernel mit dem Proxmox-Host. Er ist im Grunde ein abgeschotteter Bereich auf dem Host, der wie ein eigenes System aussieht. Das macht ihn sehr sparsam, aber eben auch abhängig vom Host.
Docker selbst ist ebenfalls eine Container-Technik. Steckst Du Docker in einen LXC-Container, laufen Container in einem Container. Genau hier beginnen die Probleme.
Warum Docker in LXC Ärger machen kann
Damit Docker in einem LXC-Container überhaupt startet, musst Du ihm Rechte geben, die ein Container normalerweise nicht hat. Proxmox nennt dafür die Optionen nesting und keyctl. Das Handbuch beschreibt keyctl ausdrücklich als Notlösung, die für Docker in unprivilegierten Containern nötig ist, und empfiehlt für Anwendungscontainer bei Bedarf an voller Isolation und Live-Migration eine VM.
In der Praxis zeigt sich das so:
- Updates können Docker lahmlegen. Weil der Container vom Kernel und den Sicherheitsregeln des Hosts abhängt, haben Updates von Proxmox, LXC oder Docker in der Vergangenheit wiederholt dazu geführt, dass Docker in LXC-Containern nicht mehr startete. In einer VM betrifft Dich so etwas nicht.
- Speicher-Treiber. Liegt der Container auf ZFS, braucht Docker je nach Version Anpassungen am Speicher-Treiber, sonst wird es langsam oder startet nicht.
- Kein Live-Umzug. In einem Proxmox-Cluster lassen sich VMs im laufenden Betrieb auf einen anderen Host verschieben, Container nicht.
- Sicherheit. Ein Container mit nesting sieht Teile des Host-Systems. Bricht ein Angreifer aus einem Docker-Container aus, ist er näher am Host als in einer VM.
Wann LXC trotzdem die bessere Wahl ist
LXC hat zwei echte Stärken: den geringen Ressourcenverbrauch und den einfachen Zugriff auf Hardware des Hosts. Ein Debian-Container braucht im Leerlauf rund 30 MB RAM, eine Debian-VM eher 200 bis 300 MB. Auf einem Mini-PC mit 16 GB fällt das kaum ins Gewicht, auf einem alten Rechner mit 4 GB schon.
Der wichtigere Punkt ist die Grafikeinheit. Dienste wie Immich, Jellyfin oder Frigate nutzen die integrierte Grafik des Prozessors, um Videos umzuwandeln oder Bilder zu analysieren. Mehrere LXC-Container können sich diese Grafik teilen. Eine VM bekommt sie nur über PCI-Passthrough, und dann exklusiv: Weder der Host noch eine andere VM können sie gleichzeitig nutzen.
Daraus ergibt sich diese Faustregel:
| Situation | Empfehlung |
|---|---|
| Mehrere Docker-Dienste, ein Docker-Host für alles | VM |
| Dienst ohne Docker, etwa Pi-hole oder ein Webserver direkt aus Debian-Paketen | LXC |
| Sehr wenig RAM auf dem Host | LXC, wenn möglich ohne Docker |
| Videotranscoding für mehrere Dienste mit der integrierten Grafik | LXC mit durchgereichter Grafik, oder eine einzige VM, die alle diese Dienste enthält |
| Proxmox-Cluster mit Live-Migration | VM |
Seit Proxmox VE 9.1 gibt es übrigens eine dritte Möglichkeit: Proxmox kann Docker-Images direkt als LXC-Container anlegen, ganz ohne Docker. Die Funktion ist noch als Technologievorschau gekennzeichnet. Für einzelne, einfache Dienste lohnt ein Blick darauf, für einen ganzen Stack mit Docker Compose ersetzt sie die VM noch nicht.
Die Docker-VM einrichten
Das Installationsabbild holen
Lade das aktuelle Debian-Abbild direkt auf den Proxmox-Host. Klicke in der Weboberfläche links auf Deinen Knoten, dann auf den Speicher local und auf ISO Images. Über Download from URL trägst Du die Adresse des aktuellen Debian-netinst-Abbilds von der Download-Seite von Debian ein und klickst auf Query URL und danach auf Download.
Die VM anlegen
Klicke oben rechts auf Create VM und gehe die Reiter so durch:
- General: Name, zum Beispiel
docker. - OS: das gerade geladene Debian-Abbild.
- System: Setze den Haken bei Qemu Agent. Damit kann Proxmox die VM sauber herunterfahren und ihre IP-Adresse anzeigen.
- Disks: 32 GB reichen für das System und Docker-Images. Daten wie Fotos legst Du besser auf eine eigene, zusätzliche Festplatte. Setze die Haken bei Discard und, wenn der Speicher auf einer SSD liegt, bei SSD emulation. Dann gibt die VM gelöschten Platz an den Host zurück.
- CPU: zwei bis vier Kerne. Stelle den Type auf
host, damit die VM alle Funktionen Deines Prozessors nutzt. Nur in einem Cluster mit unterschiedlichen Prozessoren lässt Du den Standard stehen. - Memory: 4096 MB als Startwert. Für Immich mit maschinellem Lernen planst Du eher 6 bis 8 GB ein.
- Network: Standard mit VirtIO lassen.
Starte die VM und installiere Debian über die Console. Wähle bei der Softwareauswahl nur SSH server und Standard-Systemwerkzeuge und lass alle Desktop-Umgebungen weg.
Gast-Agent und Docker installieren
Melde Dich nach der Installation per SSH an und installiere den Gast-Agenten:
sudo apt update
sudo apt install qemu-guest-agent
sudo systemctl start qemu-guest-agentIn der Proxmox-Übersicht der VM steht danach unter Summary die IP-Adresse. Dann installierst Du Docker aus dem offiziellen Paketarchiv von Docker, wie es die Docker-Dokumentation für Debian beschreibt. Zuerst der Schlüssel:
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.ascDann die Paketquelle:
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/debian
Suites: $(. /etc/os-release && echo "$VERSION_CODENAME")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOFUnd zuletzt Docker selbst mit dem Compose-Plugin:
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginPrüfe mit sudo docker run hello-world, ob alles läuft. Docker lädt ein kleines Testimage und gibt eine Begrüßung aus. Ab hier funktionieren alle Anleitungen für Docker Compose wie auf jedem anderen Linux-Server, etwa Immich installieren: iCloud-Fotos selbst hosten.
Backups über Proxmox
Ein großer Vorteil der VM: Proxmox kann sie im laufenden Betrieb komplett sichern. Lege unter Datacenter > Backup einen Job an, wähle die Docker-VM, als Modus Snapshot und als Ziel ein NAS oder eine zweite Festplatte. Im Ernstfall spielst Du die ganze VM mit wenigen Klicks zurück, inklusive aller Container und Einstellungen.
Datenbanken in den Containern sind dabei auf dem Stand des Snapshot-Zeitpunkts. Durch den Gast-Agenten friert Proxmox das Dateisystem für den Snapshot kurz ein, das macht ihn deutlich konsistenter. Für wichtige Datenbanken lohnt sich zusätzlich ein eigener Export.
Wenn Du doch LXC nehmen willst
Für einen einzelnen, unkritischen Docker-Dienst kann ein LXC-Container ausreichen. Lege ihn als unprivilegierten Container an, das ist der Standard und deutlich sicherer als ein privilegierter. Aktiviere danach in der Shell des Proxmox-Hosts die beiden nötigen Optionen, hier für den Container mit der Nummer 101:
pct set 101 --features nesting=1,keyctl=1Starte den Container neu und installiere Docker darin wie oben beschrieben. Prüfe nach jedem größeren Update von Proxmox, ob Deine Container noch starten, bevor Du Dich darauf verlässt.
Die Entscheidung kurz gefasst
Die Frage LXC oder VM hat für Docker eine klare Standardantwort: VM. Sie kostet ein paar hundert Megabyte RAM mehr, ist aber vom Host entkoppelt, lässt sich vollständig sichern und übersteht Updates ohne Überraschungen. LXC spielt seine Stärken bei Diensten ohne Docker aus und dort, wo sich mehrere Dienste die integrierte Grafik teilen sollen. Wenn Du noch überlegst, welche Hardware Du für Proxmox nimmst, hilft Dir der Vergleich Raspberry Pi 5 oder Mini-PC für Home Assistant? weiter.
Weiterlesen.
-
Raspberry Pi & LinuxRaspberry Pi 5 oder Mini-PC für Home Assistant?
Raspberry Pi 5, Home Assistant Green oder Mini-PC mit Intel N150: Stromverbrauch, Stromkosten pro Jahr im 24/7-Betrieb und Gesamtkosten über fünf Jahre.
Nathan Base -
Raspberry Pi & LinuxImmich installieren: iCloud-Fotos selbst hosten
Immich mit Docker auf Raspberry Pi 5 oder Mini-PC installieren, die Mediathek aus Apple Fotos importieren und das iPhone automatisch sichern.
Nathan Base -
Raspberry Pi & LinuxFrigate mit Home Assistant: Kameras lokal auswerten
Frigate erkennt Personen, Autos und Tiere auf Deinen Kameras lokal ohne Cloud-Abo. Hardware, Kamerawahl, Installation und Anbindung an Home Assistant.
Nathan Base -
Raspberry Pi & LinuxJellyfin auf dem Mini-PC: Hardware-Transcoding mit N100
Jellyfin mit Docker auf einem Mini-PC mit Intel N100 installieren und Quick Sync aktivieren, damit 4K-Filme auch unterwegs flüssig laufen.
Nathan Base -
Raspberry Pi & LinuxPaperless-ngx: Papierpost scannen und automatisch ablegen
Paperless-ngx mit Docker installieren, Briefe per iPhone scannen, deutsche Texterkennung einstellen und Rechnungen automatisch sortieren lassen.
Nathan Base -
Raspberry Pi & LinuxWebDAV-Server auf dem Raspberry Pi einrichten mit Apache
So richtest Du auf dem Raspberry Pi mit Apache einen WebDAV-Server mit Passwortschutz ein und bindest ihn am Mac, unter Windows und Linux als Laufwerk ein.
Nathan Base