Восстановление docker в proxmox lxc после обновления AppArmor

:police_car_light: Проблема с Docker внутри LXC после обновления runc (CVE-2025-52881)

После обновления пакета runc (версии 1.3.2+ и 1.2.7+) многие пользователи Proxmox столкнулись с тем, что Docker перестал запускаться внутри контейнеров LXC.

Ошибка выглядит так:


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

Заметка:

Кого касается:
Проблема проявляется на Proxmox / Debian / Ubuntu, если Docker запущен внутри LXC-контейнера, а не напрямую на хосте.


:magnifying_glass_tilted_left: Контекст и причина

Обновление безопасности runc изменило способ работы с файловыми дескрипторами procfs.
В сочетании с включённым AppArmor это привело к тому, что Docker внутри LXC больше не может обращаться к системным параметрам ядра.

Результат — отказ при инициализации контейнера Docker.

:books: Подробные обсуждения:


:gear: Почему не помогает правка AppArmor

В Proxmox для LXC используется настройка:


lxc.apparmor.profile = generated

Это означает, что профиль создаётся автоматически при старте контейнера.
Любые изменения в /etc/apparmor.d просто игнорируются — профиль будет пересоздан заново.

В итоге Docker блокируется при попытке доступа к sysctl net.ipv4.ip_unprivileged_port_start.


:puzzle_piece: Временное решение (Proxmox LXC)

Предупреждение:

Это временное решение, которое ослабляет защиту AppArmor.
Используйте только до выхода официального патча от Proxmox / LXC / Docker / runc.

  1. На хосте Proxmox откройте конфигурацию вашего контейнера:
   nano /etc/pve/lxc/<CTID>.conf
  1. Добавьте в конец файла две строки:

    lxc.apparmor.profile: unconfined
    lxc.mount.entry: /dev/null sys/module/apparmor/parameters/enabled none bind 0 0
    
  2. Перезапустите контейнер:

    pct stop <CTID> && pct start <CTID>
    
  3. Проверьте:

    docker run --rm alpine echo "ok"
    
Заметка:

/dev/null bind-mount имитирует отключённый AppArmor.
Без него Docker выдаст ошибку:
Could not check if docker-default AppArmor profile was loaded: permission denied


:three_o_clock: Когда ждать исправления

  • Команда runc подтвердила баг и готовит исправление.
  • Разработчики LXC и Proxmox уже обсуждают обновление генератора профилей.
  • Следите за ходом работ в:
    GitHub runc #4968
    Proxmox Forum Thread

:speech_balloon: Резюме

  • Ошибка вызвана обновлением runc ≥ 1.3.2 / 1.2.7

  • Проявляется при запуске Docker внутри LXC

  • Временный фикс:

    lxc.apparmor.profile: unconfined
    lxc.mount.entry: /dev/null sys/module/apparmor/parameters/enabled none bind 0 0
    
  • Постоянное решение — дождаться официального патча Proxmox / LXC


:link: Полезные ссылки