修复 LXC 环境中有关 net.ipv4.ip_unprivileged_port_start 的 permission denied 问题
问题的根源在于:为了修复一个名为 CVE-2025-52881 的高危安全漏洞,containerd.io (1.7.28-2) 修改了内部的权限检查机制。然而,这项改动在嵌套虚拟化环境(例如在 LXC 容器中运行 Docker) 中,会与 AppArmor 安全模块产生冲突,导致 runc 运行时在启动容器时被错误地拦截并报出 "permission denied",致使所有容器无法启动。
如果你也有类似的错误,请考虑降级 containerd.io 或者升级宿主机(如 PVE 9.1):
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修复方案
A. 临时降级 containerd.io 包
此方案是通过将 containerd.io 降级到出问题前的稳定版本来恢复环境,对现有的数据和配置无影响,是风险最低的应急方案。
按我的步骤来:
# 1. 查看可安装的版本
apt list -a containerd.io
# 2. 执行降级命令安装回 1.7.28-1 版本
# 请注意,具体包名后缀可能因你的操作系统略有不同,请以上一步显示的为准
apt install containerd.io=1.7.28-1~debian.12~bookworm
# 3. 锁定该版本
apt-mark hold containerd.io此时已经可以正常启动,如果不行,请尝试 systemctl restart docker 重启服务。
B. 为 LXC 容器禁用 AppArmor
- 找到你的 LXC 容器的配置文件(通常在 /etc/pve/lxc/<容器ID>.conf)。
- 在该文件末尾追加以下两行内容,以解除 AppArmor 的限制:
lxc.apparmor.profile: unconfined
lxc.mount.entry: /dev/null sys/module/apparmor/parameters/enabled none bind,ro 0 0- 保存文件后,需要重启整个 LXC 容器。
C. 升级宿主机虚拟化系统
Proxmox VE (PVE) 在后续版本(如 9.1)中已解决了此兼容性问题。如果你能接受全线升级操作,可以考虑。