Docker in einer vollständigen VM laufen zu lassen funktioniert, verschenkt aber die Vorteile von Proxmox. Ein LXC Container braucht keinen eigenen Kernel und startet in Sekunden statt Minuten. Docker darin zu betreiben kombiniert das Beste aus beiden Welten: leichtgewichtige Proxmox-Container mit dem Docker-Ökosystem.
Es gibt dabei ein paar Stolpersteine. Diese Anleitung zeigt, wie Sie Docker in einem Proxmox VE 9 LXC Container sauber einrichten.
Schritt 1: LXC Container erstellen
Der Container braucht spezielle Features, damit Docker funktioniert:
pct create 200 local:vztmpl/ubuntu-24.04-standard_24.04-2_amd64.tar.zst \
--hostname docker-host \
--cores 2 \
--memory 2048 \
--swap 1024 \
--rootfs local-lvm:30 \
--net0 name=eth0,bridge=vmbr0,ip=dhcp \
--unprivileged 1 \
--features nesting=1,keyctl=1 \
--start 1
Warum diese Parameter?
nesting=1— Erlaubt verschachtelte Container (Docker erstellt eigene Namespaces)keyctl=1— Wird von Docker für Overlay-Dateisysteme benötigtunprivileged 1— Sicherheit: Container hat keine Root-Rechte auf dem Host- 30 GB Disk — Docker-Images brauchen Platz, 8 GB werden schnell knapp
Schritt 2: Docker installieren
Im Container:
# In den Container wechseln
pct enter 200
# System aktualisieren
apt update && apt upgrade -y
# Docker-Repository einrichten
apt install -y ca-certificates curl gnupg
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" \
> /etc/apt/sources.list.d/docker.list
# Docker installieren
apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# Prüfen
docker run --rm hello-world
Häufige Fehler und Lösungen
Fehler: AppArmor "docker-default" Profil
AppArmor enabled on system but the docker-default profile could not be loaded
Lösung: In der Proxmox-Host-Konsole (nicht im Container):
# Container stoppen
pct stop 200
# AppArmor-Profil anpassen
echo "lxc.apparmor.profile = unconfined" >> /etc/pve/lxc/200.conf
# Container starten
pct start 200
Hinweis: apparmor.profile = unconfined reduziert die Isolation. Für Produktivsysteme sollten Sie stattdessen einen privilegierten Container verwenden oder ein eigenes AppArmor-Profil erstellen.
Fehler: Overlay-Dateisystem nicht verfügbar
failed to register layer: Error processing tar file
Lösung: Prüfen Sie, ob keyctl aktiviert ist:
# Auf dem Proxmox-Host
pct config 200 | grep features
# Sollte enthalten: keyctl=1,nesting=1
Fehler: Bridge-Netzwerk funktioniert nicht
Docker-Container im LXC können standardmäßig das Docker-Bridge-Netzwerk nutzen. Falls Probleme auftreten:
# Im Container: IP-Forwarding aktivieren
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
Docker Compose Beispiel
Ein typisches Setup mit Nginx Reverse Proxy und einer Webanwendung:
# docker-compose.yml
services:
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
restart: unless-stopped
app:
image: your-app:latest
expose:
- "3000"
environment:
- NODE_ENV=production
restart: unless-stopped
db:
image: postgres:16-alpine
volumes:
- db_data:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD_FILE=/run/secrets/db_password
restart: unless-stopped
volumes:
db_data:
# Starten
docker compose up -d
# Logs prüfen
docker compose logs -f
# Status
docker compose ps
Best Practices
Ressourcen begrenzen
Docker-Container im LXC teilen sich die zugewiesenen Ressourcen. Begrenzen Sie einzelne Services:
services:
app:
image: your-app:latest
deploy:
resources:
limits:
memory: 512M
cpus: '1.0'
Volumes statt Bind Mounts
Verwenden Sie Docker Volumes statt Bind Mounts für persistente Daten. Volumes werden von Docker verwaltet und sind einfacher zu sichern:
# Volume erstellen
docker volume create app_data
# Backup eines Volumes
docker run --rm -v app_data:/data -v /backup:/backup alpine \
tar czf /backup/app_data_backup.tar.gz -C /data .
Automatische Updates
Halten Sie Docker-Images aktuell:
# Alle Images aktualisieren
docker compose pull
docker compose up -d
# Unbenutzte Images aufräumen
docker image prune -f
Monitoring
Überwachen Sie den Ressourcenverbrauch:
# Live-Übersicht aller Container
docker stats
# Disk-Verbrauch
docker system df
LXC + Docker vs. VM + Docker
| LXC + Docker | VM + Docker | |
|---|---|---|
| RAM-Overhead | ~50 MB (nur LXC) | ~500 MB (Kernel + OS) |
| Startzeit | 2-3 Sekunden | 30-60 Sekunden |
| Disk-Overhead | Minimal | 2-5 GB für OS |
| Isolation | Gut (Namespaces) | Sehr gut (Hardware-Level) |
| Kompatibilität | 99% der Docker-Images | 100% |
| Geeignet für | Die meisten Workloads | Spezialfälle, maximale Isolation |
Fazit
Docker in einem Proxmox LXC Container ist die ressourcenschonendste Variante um Container-Workloads zu betreiben. Mit den richtigen Einstellungen — Nesting, keyctl, ausreichend Disk — läuft es stabil und performant.
Die häufigsten Probleme (AppArmor, Overlay, Netzwerk) sind mit wenigen Handgriffen gelöst. Für Produktivumgebungen empfehlen wir zusätzlich regelmäßige Backups des gesamten LXC Containers und Monitoring der Docker-Services.
Brauchen Sie Hilfe bei der Einrichtung oder Verwaltung Ihrer Container-Infrastruktur? Wir übernehmen das gerne.