无法在LXC容器内运行启用NVIDIA GPU的Docker容器
问题
在LXC容器内运行需要GPU访问权限的Docker容器时启动失败,添加--gpus=all或--runtime=nvidia参数后触发报错,错误信息如下:
docker: 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: error running hook #0: error running hook: exit status 1, stdout: , stderr: Auto-detected mode as 'legacy' nvidia-container-cli: mount error: failed to add device rules: unable to find any existing device filters attached to the cgroup: bpf_prog_query(BPF_CGROUP_DEVICE) failed: operation not permitted: unknown.
环境信息
- 宿主机:Proxmox 8(基于Debian 12),已安装NVIDIA驱动(
nvidia-smi验证可用) - LXC容器内NVIDIA驱动正常(
nvidia-smi运行成功) - GPU:Nvidia Quadro K420
- 驱动版本:470.199.02
- CUDA版本:11.4
- LXC已配置NVIDIA设备直通
当前LXC配置
# Allow cgroup access lxc.cgroup2.devices.allow: c 195:* rwm lxc.cgroup2.devices.allow: c 235:* rwm lxc.cgroup2.devices.allow: c 511:* rwm lxc.cgroup2.devices.allow: c 226:* rwm lxc.cgroup2.devices.allow: c 239:* rwm lxc.cgroup2.devices.allow: c 243:* rwm # Pass through device files lxc.mount.entry: /dev/nvidia0 dev/nvidia0 none bind,optional,create=file lxc.mount.entry: /dev/nvidiactl dev/nvidiactl none bind,optional,create=file lxc.mount.entry: /dev/nvidia-uvm dev/nvidia-uvm none bind,optional,create=file lxc.mount.entry: /dev/nvidia-modeset dev/nvidia-modeset none bind,optional,create=file lxc.mount.entry: /dev/nvidia-uvm-tools dev/nvidia-uvm-tools none bind,optional,create=file lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir
已尝试操作
- 确认Docker与NVIDIA驱动独立运行正常
- LXC以特权模式运行,非GPU型Docker容器可正常工作
解决方案
1. 扩展LXC容器权限配置
编辑LXC容器的配置文件(通常路径为/etc/pve/lxc/<CTID>.conf),添加以下内容:
# 允许BPF相关操作权限 lxc.cgroup2.allow: bpf # 关闭AppArmor限制 lxc.apparmor.profile: unconfined # 确保容器拥有完整特权 lxc.cap.drop: lxc.privileged: 1
保存后重启LXC容器:
pct restart <CTID>
2. 强制nvidia-container-runtime使用nvidia模式
在LXC容器内创建/修改配置文件/etc/nvidia-container-runtime/config.toml,添加:
mode = "nvidia"
3. 验证cgroup2挂载状态
在LXC容器内执行以下命令,确认cgroup2正常挂载:
mount | grep cgroup2
需确保输出包含cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate)
4. 重启Docker服务
在LXC容器内重启Docker使配置生效:
systemctl restart docker
5. 测试GPU容器运行
执行测试命令验证GPU访问是否正常:
docker run --rm --gpus all nvidia/cuda:11.4.0-base-ubuntu20.04 nvidia-smi
额外调试步骤
若问题仍存在,在LXC容器内运行以下命令检查nvidia容器工具状态:
nvidia-container-cli info
重点查看cgroup与设备权限相关的异常提示。
内容的提问来源于stack exchange,提问作者J J
相关产品推荐
相关产品推荐

