You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CentOS7下Docker调用NVIDIA Runtime遇权限拒绝问题排查

问题原因分析与解决

这是典型的SELinux权限限制导致的问题,结合你使用的CentOS 7(默认开启SELinux Enforcing模式)和较旧的Docker 1.13.1版本,具体原因拆解如下:

核心原因

当你直接执行docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi时,Docker会直接调用nvidia-smi二进制文件启动进程,此时该进程的SELinux上下文为container_t。而CentOS 7中NVIDIA设备文件(如/dev/nvidia0、/dev/nvidiactl等)的SELinux类型为nvidia_device_t,默认的SELinux策略不允许container_t类型的进程访问nvidia_device_t类型的设备,因此触发了"permission denied"错误。

而当你通过sh -c nvidia-smi执行时,Docker先启动sh进程(上下文同样是container_t),再由sh去调用nvidia-smi。此时nvidia-container-runtime注入的SELinux临时规则或环境设置会生效,允许shell进程间接访问NVIDIA设备,因此nvidia-smi能正常运行。

验证方法

你可以临时将SELinux切换为Permissive模式来验证:

sudo setenforce 0

然后再次运行直接执行nvidia-smi的命令:

sudo docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi

如果此时命令正常输出,就可以确认是SELinux的限制导致的问题。

永久解决方法

安装官方提供的nvidia-container-selinux包,该包会添加专门的SELinux规则,允许容器进程访问NVIDIA设备:

# 先添加nvidia-docker的yum源(如果还没配置)
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | sudo tee /etc/yum.repos.d/nvidia-docker.repo

# 安装nvidia-container-selinux
sudo yum install -y nvidia-container-selinux

安装完成后,重启Docker服务:

sudo systemctl daemon-reload
sudo systemctl restart docker

之后就可以直接运行docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi而不会再出现权限问题了。


内容的提问来源于stack exchange,提问作者yee379

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:57:39