Docker调用NVIDIA GPU报错:libnvidia-ml.so.1未找到(nvidia-smi正常)
Docker容器初始化失败:libnvidia-ml.so.1找不到(NVIDIA驱动525.85.12)
问题描述
Linux系统中,nvidia-smi可正常检测到NVIDIA驱动(版本525.85.12)及RTX A5000 GPU,但执行以下命令启动GPU支持的Docker容器时失败:
docker run --rm --gpus all ubuntu:18.04 nvidia-smi
错误信息
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: initialization error: load library failed: libnvidia-ml.so.1: cannot open shared object file: no such file or directory: unknown.
系统GPU状态
nvidia-smi输出显示驱动与GPU运行正常:
$ nvidia-smi Thu Feb 22 02:39:45 2024 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 525.85.12 Driver Version: 525.85.12 CUDA Version: 12.0 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 NVIDIA RTX A5000 On | 00000000:18:00.0 Off | 0 | | 30% 37C P8 14W / 230W | 11671MiB / 23028MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ | 1 NVIDIA RTX A5000 On | 00000000:86:00.0 Off | 0 | | 55% 80C P2 211W / 230W | 13119MiB / 23028MiB | 79% Default | | | | N/A | +-------------------------------+----------------------+----------------------+
已确认信息
执行nvidia-container-cli -k -d /dev/tty info可检测到系统中存在libnvidia-ml.so.525.85.12,但Docker容器初始化时仍提示找不到libnvidia-ml.so.1。
已尝试的解决方案(未生效)
- 重装NVIDIA驱动与CUDA Toolkit
- 重装NVIDIA Container Toolkit
- 配置Docker与NVIDIA Container Toolkit
- 设置
LD_LIBRARY_PATH包含NVIDIA库路径
解决方案
1. 修复libnvidia-ml.so.1软链接
libnvidia-ml.so.1是指向具体版本库文件的软链接,若该链接缺失会导致容器无法找到库文件:
- 定位NVIDIA库目录:
# 常见路径,若不存在可尝试/usr/lib64/ cd /usr/lib/x86_64-linux-gnu/ - 查看现有软链接:
ls -l libnvidia-ml.so.* - 若
libnvidia-ml.so.1未指向libnvidia-ml.so.525.85.12,手动创建:sudo ln -s libnvidia-ml.so.525.85.12 libnvidia-ml.so.1
2. 验证Docker Daemon配置
确保Docker已配置NVIDIA runtime为默认选项:
- 编辑
/etc/docker/daemon.json(若不存在则创建):{ "runtimes": { "nvidia": { "path": "nvidia-container-runtime", "runtimeArgs": [] } }, "default-runtime": "nvidia" } - 重启Docker服务:
sudo systemctl restart docker
3. 检查nvidia-container-runtime配置
确认nvidia-container-runtime的hook配置正确:
- 编辑
/etc/nvidia-container-runtime/config.toml:
确保[nvidia-container-cli] no-cgroups = false ldconfig = "/sbin/ldconfig"ldconfig路径与系统实际路径一致(可通过which ldconfig确认)。 - 重启Docker服务。
4. 使用NVIDIA官方基础镜像
尝试使用NVIDIA提供的预配置CUDA基础镜像,排除Ubuntu基础镜像的依赖缺失问题:
docker run --rm --gpus all nvidia/cuda:12.0.0-base-ubuntu18.04 nvidia-smi
5. 排查安全机制影响
若系统启用了SELinux或AppArmor,可能会阻止容器访问主机库文件:
- SELinux临时测试:
重新运行容器命令,若恢复正常,需配置SELinux规则允许NVIDIA容器访问相关文件。sudo setenforce 0 - AppArmor临时测试:
测试后若正常,需调整AppArmor配置或添加容器的豁免规则。sudo aa-teardown
内容的提问来源于stack exchange,提问作者Sik So
相关产品推荐
相关产品推荐

