Zum Inhalt springen

Docker in LXC Container startet nicht mehr

Aus LHlab Wiki

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