非sudo运行GPU版Docker容器时出现libnvidia-ml.so.1错误求解决
问题描述
尝试调用GPU运行Docker Hub的nvidia/cuda镜像,执行以下命令:
docker run -it --gpus all -v --name my-gpu nvidia/cuda:11.7.0-cudnn8-devel-ubuntu22.04
出现如下错误:
Unable to find image 'nvidia/cuda:11.7.0-cudnn8-devel-ubuntu22.04' locally 11.7.0-cudnn8-devel-ubuntu22.04: Pulling from nvidia/cuda d19f32bd9e41: Already exists 292e5e4dcc78: Already exists f027458ef473: Already exists ad9cd0a3350e: Already exists 4c0e748dfb24: Already exists e40f2cbf6f5e: Pull complete 3ac150f167fe: Pull complete dd80ebac36de: Pull complete fd2716719ab6: Pull complete e5ff1925518e: Pull complete Digest: sha256:1055a2fa47b063336f578f390131efa4bb02fbfe095608481fd32b6fca9b8b32 Status: Downloaded newer image for nvidia/cuda:11.7.0-cudnn8-devel-ubuntu22.04 docker: Error response from daemon: 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: initialization error: load library failed: libnvidia-ml.so.1: cannot open shared object file: no such file or directory: unknown. ERRO[0465] error waiting for container: context canceled
使用sudo执行相同命令则可正常运行:
sudo docker run -it --gpus all --name my-container-03 nvidia/cuda:11.7.0-cudnn8-devel-ubuntu22.04
需实现无需sudo即可正常运行该容器。
解决方案
1. 将当前用户加入docker用户组
默认Docker命令需root权限执行,将用户加入docker组可免sudo操作:
- 若docker组不存在,先创建组:
sudo groupadd docker - 将当前用户添加到docker组:
sudo usermod -aG docker $USER - 重新登录系统(或执行
newgrp docker临时生效),使权限变更生效。
2. 修复nvidia-container-toolkit权限
错误提示libnvidia-ml.so.1无法访问,是因为普通用户缺少调用nvidia-container-cli的权限,需设置setuid:
- 查找nvidia-container-cli的路径:
which nvidia-container-cli - 通常路径为
/usr/bin/nvidia-container-cli,执行以下命令:sudo chmod u+s /usr/bin/nvidia-container-cli
3. 验证配置
完成上述步骤后,重新执行命令(注意原命令中-v参数缺少挂载路径,需补充或移除):
docker run -it --gpus all --name my-gpu nvidia/cuda:11.7.0-cudnn8-devel-ubuntu22.04
内容的提问来源于stack exchange,提问作者S. Jay
相关产品推荐
相关产品推荐

