如何以非root用户身份使用nvidia-docker CUDA容器并解决权限问题?
解决Docker非root用户CUDA容器权限问题
问题原因
运行nvidia-smi提示Failed to initialize NVML: Insufficient Permissions,核心原因是非root用户没有访问NVIDIA设备文件的权限。容器内的/dev/nvidia*设备文件默认归root用户和nvidia组所有,而你的Dockerfile仅将用户加入了video和sudo组,未加入nvidia组,导致权限不足。
解决方案
修改Dockerfile,确保用户加入nvidia组,同时为了适配主机与容器的组ID一致性(避免因组ID不匹配导致的权限问题),可以动态获取主机NVIDIA设备的组ID来创建容器内的nvidia组:
FROM nvidia/cudagl:11.2.2-runtime-ubuntu18.04 # 动态创建与主机匹配的nvidia组,再创建用户并加入该组及video、sudo组 RUN groupadd -f -g $(stat -c "%g" /dev/nvidia0 2>/dev/null || echo 1001) nvidia && \ useradd -ms /bin/bash testuser -G nvidia,video,sudo USER testuser ENTRYPOINT ["/bin/bash"]
关键说明
groupadd -f -g ... nvidia:-f避免组已存在时报错,$(stat -c "%g" /dev/nvidia0)获取主机NVIDIA设备的组ID,若容器构建阶段未挂载设备则默认用1001作为组ID。- 将用户加入
nvidia组后,即可获得访问/dev/nvidia*设备的权限,nvidia-smi及依赖GPU的VirtualGL渲染功能都能正常运行。
验证方法
构建并启动容器后,执行nvidia-smi,若能正常输出GPU信息则说明权限问题已解决,VirtualGL结合Xvfb的Chrome渲染也能正常工作。
内容的提问来源于stack exchange,提问作者Jordan Sim
相关产品推荐
相关产品推荐

