Docker in LXC Container startet nicht mehr

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/... blockieren
  • lxc.cap.add: SYS_ADMIN NET_ADMIN DAC_READ_SEARCH → erlaubt Docker/runc, Netzwerk-Parameter zu lesen
  • lxc.mount.auto: proc:rw sys:rw → erlaubt Lese-/Schreibzugriff auf /proc und /sys
  • lxc.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