一、基础环境:docker,带GPU的容器,执行nvidia-smi报错
在这里插入图片描述
二.解决措施:

在 Docker 容器内执行 ldconfig 报错 libnvidia-ml.so.1 is empty, not checked 时,可通过以下步骤排查和解决:

🔍 ‌1. 检查宿主机驱动与容器挂载‌

宿主机驱动验证‌:
确保宿主机已安装正确版本的 NVIDIA 驱动并正常加载:

bash
Copy Code
nvidia-smi # 宿主机执行,确认驱动版本(如525.105.17):ml-citation{ref=“1,5” data=“citationList”}

若驱动未安装,需先安装匹配的驱动版本。

容器启动参数‌:
启动容器时必须添加 --gpus all 参数以挂载驱动文件:

bash
Copy Code
docker run --gpus all -it nvidia/cuda:11.8-base

缺少此参数会导致容器内无法访问宿主机驱动库文件。

🛠️ ‌2. 修复容器内空库文件‌

手动重新链接库文件‌:
若容器内 libnvidia-ml.so.1 为空文件,执行以下操作:

bash
Copy Code
rm -f /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1 # 删除空文件
ln -s /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.<驱动版本号> /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1 # 重新创建软链接:ml-citation{ref=“9,12” data=“citationList”}

驱动版本号可通过宿主机执行 ls /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.* 获取。

刷新动态链接库缓存‌:

bash
Copy Code
ldconfig # 重新加载库文件:ml-citation{ref=“9,10” data=“citationList”}

⚠️ ‌3. 验证NVIDIA Container Toolkit配置‌

检查工具包安装‌:
宿主机需安装最新版 NVIDIA Container Toolkit 并配置 Docker 运行时:

bash
Copy Code
sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker:ml-citation{ref=“1,6” data=“citationList”}

检查容器运行时配置‌:
确认 /etc/docker/daemon.json 包含以下内容:

json
Copy Code
{
“runtimes”: {
“nvidia”: {
“path”: “nvidia-container-runtime”,
“runtimeArgs”: []
}
}
}:ml-citation{ref=“4,7” data=“citationList”}

📌 ‌4. 其他可能原因‌
镜像兼容性问题‌:
使用官方基础镜像(如 nvidia/cuda:11.8-base)而非自定义镜像,避免库文件冲突。
PID命名空间隔离‌:
尝试启动容器时添加 --pid=host 参数:
bash
Copy Code
docker run --gpus all --pid=host -it nvidia/cuda:11.8-base:ml-citation{ref=“14” data=“citationList”}

✅ ‌验证解决‌

在容器内执行以下命令确认修复:

bash
Copy Code
ls -l /usr/lib/x86_64-linux-gnu/libnvidia-ml.so* # 检查软链接是否有效
nvidia-smi # 应显示与宿主机一致的驱动信息:ml-citation{ref=“1,5” data=“citationList”}

更多推荐