找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 32|回复: 0

[问题反馈] 关于大家关心的Nvidia在Docker运行中出现的一些问题,进行简单的解释。

[复制链接]

1

主题

10

回帖

146

积分

管理员

积分
146
发表于 2025-10-15 00:48:24 | 显示全部楼层 |阅读模式

前言:

飞牛OS在开发中可以看的出,在安全方面还是比较严格的。在我们刚安装时候输入的用户名时,你的权限就已经确定了,所以在web中打开的Docker也继承了你的用户权限,并不是root的高级权限,所以在调用系统层时,会出现无法访问的现象。

导致用户无法在Docker中使用Nvidia驱动的主要有2个原因,一个是应用商城中的Nvidia驱动中的部分源文件有问题。另外一个是docker权限无法调用系统文件。

下面引用了几位大神之作,都是正确合理的操作,我只是做了一点点补充。

在飞牛OS使用libnvidia-container让docker容器支持NVIDIA GPU加速
https://club.fnnas.com/forum.php?mod=viewthread&tid=14106
最新版系统docker中调用nvidia失效解决办法
https://club.fnnas.com/forum.php?mod=viewthread&tid=19860
安装驱动后Docker下无法使用CUDA的解决方法
https://club.fnnas.com/forum.php?mod=viewthread&tid=1843

正文:

刚安装好飞牛OS的用户先进行普通注册,并安装好应用商城中的Nvidia。同时启动一次Docker(很重要),其次打开SSH功能后进入ssh代码:

#添加源地址

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \  && curl -s -L https://mirrors.ustc.edu.cn/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \    sed 's#deb https://nvidia.github.io#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://mirrors.ustc.edu.cn#g' | \    tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

#更新源列表以及安装

sudo apt update && sudo apt install nvidia-container-toolkit

如果你安装了Nvidia驱动,那么列表返回并不像引用文章中提示的那样,而应该是这样:(文末会提示链接错误),这个可以不用管它。

ldconfig: /lib/x86_64-linux-gnu/libnvidia-nvvm.so.4 is not a symbolic link

#替换源驱动内 库文件

mv /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1 /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1.bakmv /usr/lib/x86_64-linux-gnu/libnvidia-ml.so /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.bakln -sf /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.560.28.03 /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1ln -sf /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.560.28.03 /usr/lib/x86_64-linux-gnu/libnvidia-ml.somv /usr/lib/x86_64-linux-gnu/libcuda.so /usr/lib/x86_64-linux-gnu/libcuda.so.bakmv /usr/lib/x86_64-linux-gnu/libcuda.so.1 /usr/lib/x86_64-linux-gnu/libcuda.so.1.bakln -sf /usr/lib/x86_64-linux-gnu/libcuda.so.560.28.03 /usr/lib/x86_64-linux-gnu/libcuda.soln -sf /usr/lib/x86_64-linux-gnu/libcuda.so.560.28.03 /usr/lib/x86_64-linux-gnu/libcuda.so.1ln -sf /lib/x86_64-linux-gnu/libGLESv2_nvidia.so.560.28.03 /lib/x86_64-linux-gnu/libGLESv2_nvidia.so.2ln -sf /lib/x86_64-linux-gnu/libcudadebugger.so.560.28.03 /lib/x86_64-linux-gnu/libcudadebugger.so.1ln -sf /lib/x86_64-linux-gnu/libEGL_nvidia.so.560.28.03 /lib/x86_64-linux-gnu/libEGL_nvidia.so.0ln -sf /lib/x86_64-linux-gnu/libGLESv1_CM_nvidia.so.560.28.03 /lib/x86_64-linux-gnu/libGLESv1_CM_nvidia.so.1ln -sf /lib/x86_64-linux-gnu/libnvidia-fbc.so.560.28.03 /lib/x86_64-linux-gnu/libnvidia-fbc.soln -sf /lib/x86_64-linux-gnu/libnvidia-fbc.so.560.28.03 /lib/x86_64-linux-gnu/libnvidia-fbc.so.1ln -sf /lib/x86_64-linux-gnu/libnvidia-cfg.so.560.28.03 /lib/x86_64-linux-gnu/libnvidia-cfg.soln -sf /lib/x86_64-linux-gnu/libnvidia-cfg.so.560.28.03 /lib/x86_64-linux-gnu/libnvidia-cfg.so.1ln -sf /lib/x86_64-linux-gnu/libnvidia-ml.so.560.28.03 /lib/x86_64-linux-gnu/libnvidia-ml.soln -sf /lib/x86_64-linux-gnu/libnvidia-ml.so.560.28.03 /lib/x86_64-linux-gnu/libnvidia-ml.so.1ln -sf /lib/x86_64-linux-gnu/libnvcuvid.so.560.28.03 /lib/x86_64-linux-gnu/libnvcuvid.soln -sf /lib/x86_64-linux-gnu/libnvcuvid.so.560.28.03 /lib/x86_64-linux-gnu/libnvcuvid.so.1ln -sf /lib/x86_64-linux-gnu/libcuda.so.560.28.03 /lib/x86_64-linux-gnu/libcuda.soln -sf /lib/x86_64-linux-gnu/libcuda.so.560.28.03 /lib/x86_64-linux-gnu/libcuda.so.1ln -sf /lib/x86_64-linux-gnu/libnvoptix.so.560.28.03 /lib/x86_64-linux-gnu/libnvoptix.so.1ln -sf /lib/x86_64-linux-gnu/libnvidia-opencl.so.560.28.03 /lib/x86_64-linux-gnu/libnvidia-opencl.so.1ln -sf /lib/x86_64-linux-gnu/libnvidia-allocator.so.560.28.03 /lib/x86_64-linux-gnu/libnvidia-allocator.soln -sf /lib/x86_64-linux-gnu/libnvidia-allocator.so.560.28.03 /lib/x86_64-linux-gnu/libnvidia-allocator.so.1ln -sf /lib/x86_64-linux-gnu/libnvidia-egl-wayland.so.1.1.13 /lib/x86_64-linux-gnu/libnvidia-egl-wayland.so.1ln -sf /lib/x86_64-linux-gnu/libOpenCL.so.1.0.0 /lib/x86_64-linux-gnu/libOpenCL.so.1ln -sf /lib/x86_64-linux-gnu/libnvidia-ptxjitcompiler.so.560.28.03 /lib/x86_64-linux-gnu/libnvidia-ptxjitcompiler.soln -sf /lib/x86_64-linux-gnu/libnvidia-ptxjitcompiler.so.560.28.03 /lib/x86_64-linux-gnu/libnvidia-ptxjitcompiler.so.1ln -sf /lib/x86_64-linux-gnu/libnvidia-ngx.so.560.28.03 /lib/x86_64-linux-gnu/libnvidia-ngx.so.1ln -sf /lib/x86_64-linux-gnu/libGLX_nvidia.so.560.28.03 /lib/x86_64-linux-gnu/libGLX_nvidia.so.0ln -sf /lib/x86_64-linux-gnu/libnvidia-opticalflow.so.560.28.03 /lib/x86_64-linux-gnu/libnvidia-opticalflow.soln -sf /lib/x86_64-linux-gnu/libnvidia-opticalflow.so.560.28.03 /lib/x86_64-linux-gnu/libnvidia-opticalflow.so.1ln -sf /lib/x86_64-linux-gnu/libnvidia-egl-gbm.so.1.1.1 /lib/x86_64-linux-gnu/libnvidia-egl-gbm.so.1ln -sf /lib/x86_64-linux-gnu/libnvidia-encode.so.560.28.03 /lib/x86_64-linux-gnu/libnvidia-encode.soln -sf /lib/x86_64-linux-gnu/libnvidia-encode.so.560.28.03 /lib/x86_64-linux-gnu/libnvidia-encode.so.1ln -sf /lib/x86_64-linux-gnu/libnvidia-nvvm.so.560.28.03 /lib/x86_64-linux-gnu/libnvidia-nvvm.soln -sf /lib/x86_64-linux-gnu/libnvidia-nvvm.so.560.28.03 /lib/x86_64-linux-gnu/libnvidia-nvvm.so.4ln -sf /lib/x86_64-linux-gnu/libnvidia-vksc-core.so.560.28.03 /lib/x86_64-linux-gnu/libnvidia-vksc-core.so.1

#docker 作为root的权限组里

sudo chown root:docker /var/run/docker.sock  # 确保所属组是 dockersudo chmod 660 /var/run/docker.sock         # 组用户可读写

#设置nvidia-smi的权限

sudo chmod a+rx /usr/bin/nvidia-smisudo chmod a+rx /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1sudo chmod a+rx /usr/lib/x86_64-linux-gnu/libnvidia-ml.so

#提高文件权限

sudo chmod 777 /usr/lib/x86_64-linux-gnu/*sudo chmod -R a+r /usr/lib/firmware/nvidia  # 开放读取权限sudo chmod a+rx /usr/lib/firmware/nvidia/560.28.03  # 确保目录可访问

#更改 docker/daemon.json文件,runtime使用绝对路径

sudo nano /etc/docker/daemon.json

打开后,用Delete删除里面所有内容,然后复制下面内容后,右键,之后Ctrl+X退出,先择Y保存,再回车确定路径

{"data-root": "/vol1/docker","insecure-registries": ["127.0.0.1:19827"],"live-restore": true,"log-driver": "json-file","log-opts": {"max-file": "5","max-size": "100m"},"proxies": {},"registry-mirrors": ["https://docker.ketches.cn","https://docker.fnnas.com","https://registry.hub.docker.com"],"runtimes": {"nvidia": {"path": "/usr/bin/nvidia-container-runtime","runtimeArgs": []}},"default-runtime": "nvidia"}

#退回用户层

exit

#设置Docker包含用户权限

sudo usermod -aG docker $USER

#最后重启电脑

sudo systemctl reboot

重启后,SSH登陆NAS,用户层校验Docker权限,

groups

如果是
Users Administrators
表示没有权限,
如果是
Users docker Administrators
就对了

root层校验runtime

sudo docker info | grep -i runtim

返回如果是:
Runtimes: io.containerd.runc.v2 nvidia runc
Default Runtime: runc
代表runtime的工作模式是runc。步骤有错误。
应该是:
Runtimes: runc io.containerd.runc.v2 nvidia
Default Runtime: nvidia
代表runtime的工作模式是nvidia。

最后,记得删除之前的Docke。重新创建容器。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

本站由纳斯五零(NAS50.CN),版权所有,保留部分权利。豫ICP备2023035803号-1

Archiver|手机版|小黑屋|Discuz! X

GMT+8, 2025-10-24 17:03 , Processed in 0.094277 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表