Docker in LXC Container startet nicht mehr
Erscheinungsbild
In unpriviligierten und nested LXC Container auf Proxmox startet Docker innerhalb des LXC Containers nicht mehr. Es erscheint nur folgende Fehlermeldung:
Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: open sysctl net.ipv4.ip_unprivileged_port_start file: reopen fd 8: permission denied: unknown
Hintergrund
Ab ca. Proxmox 8.2 / LXC 5.x wurde der Zugriff auf /proc/sys/net/... standardmäßig eingeschränkt. Dadurch schlagen alle Docker-Container fehl, die intern (über runc) auf Netzwerk-sysctl zugreifen wollen.
Lösung (empfohlen, getestet auf Proxmox 8.x mit Debian LXC)
1. Container stoppen
pct stop <container-id>
2. Container-Konfig bearbeiten
nano /etc/pve/lxc/<container-id>.conf
Dann am Ende diese Zeilen hinzufügen:
# Docker-kompatible Erweiterungen
lxc.apparmor.profile: unconfined
lxc.cap.add: SYS_ADMIN NET_ADMIN DAC_READ_SEARCH
lxc.cgroup2.devices.allow: a
lxc.mount.auto: proc:rw sys:rw
Wichtig: nicht security.privileged: 1 setzen, sonst verlierst du den Unprivileged-Vorteil. Das bleibt ein sicherer Container, aber mit erweiterten Berechtigungen für Docker.
3. Container starten
pct start <container-id>
4. Test
systemctl restart docker
docker run hello-world
Warum das funktioniert
lxc.apparmor.profile: unconfined→ hebt restriktive AppArmor-Regeln auf, die/proc/sys/net/...blockierenlxc.cap.add: SYS_ADMIN NET_ADMIN DAC_READ_SEARCH→ erlaubt Docker/runc, Netzwerk-Parameter zu lesenlxc.mount.auto: proc:rw sys:rw→ erlaubt Lese-/Schreibzugriff auf/procund/syslxc.cgroup2.devices.allow: a→ erlaubt Docker, Devices korrekt an Container durchzureichen
Bonus: Alle zukünftigen LXC-Docker-Container vorbereiten
Damit du das nicht jedes Mal manuell eintragen musst, kannst du diese Zeilen global setzen:
echo 'lxc.apparmor.profile: unconfined' >> /etc/pve/lxc/default.conf
echo 'lxc.cap.add: SYS_ADMIN NET_ADMIN DAC_READ_SEARCH' >> /etc/pve/lxc/default.conf
echo 'lxc.mount.auto: proc:rw sys:rw' >> /etc/pve/lxc/default.conf