答案是需配置docker gpu透传:先验证宿主机nvidia-smi和docker≥19.03,再重装nvidia-container-toolkit并注册为runtime,或用nvidia-container-cli显式挂载设备与库,同时修正docker-compose中runtime、环境变量及device_requests配置,并在必要时禁用cgroup v2。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果您在Docker容器中运行Llama 3模型时遇到“CUDA driver is not available”或“nvidia-smi has failed because it couldn't communicate with the nvidia driver”等报错,说明容器虽已启动,但无法触达宿主机NVIDIA驱动栈。该问题的核心并非驱动未安装,而是容器运行时缺少GPU设备透传能力。以下是解决此问题的步骤:
一、验证宿主机NVIDIA驱动与Docker基础就绪性
此步骤用于确认底层硬件抽象层是否已正确建立,排除驱动缺失或Docker版本不兼容等前置障碍。只有当nvidia-smi在宿主机可执行且Docker≥19.03时,后续GPU透传配置才有意义。
1、在终端中执行:nvidia-smi
2、检查输出是否包含Driver Version及GPU设备列表,若提示command not found,则需先安装NVIDIA驱动。
3、执行:docker --version
4、确认输出版本号≥19.03;若低于该版本,必须升级Docker引擎。
5、执行:which nvidia-container-runtime
6、若无任何输出,表明NVIDIA容器运行时未安装,需进入下一步处理。
二、重装并显式配置nvidia-container-toolkit运行时钩子
该方案绕过APT源同步延迟与包管理器缓存污染,直接从NVIDIA官方仓库拉取最新toolkit二进制并手动注册为Docker默认运行时。它强制覆盖可能损坏的runtime配置,确保--gpus参数被正确解析并触发设备挂载流程。
1、卸载现有toolkit:sudo apt remove --purge nvidia-container-toolkit
2、下载最新deb包(以Ubuntu 24.04为例):curl -fsSL https://github.com/NVIDIA/nvidia-container-toolkit/releases/download/v1.15.0/nvidia-container-toolkit_1.15.0-1_ubuntu24.04_amd64.deb -o nctk.deb
3、安装deb包:sudo dpkg -i nctk.deb
4、手动注册运行时:sudo nvidia-ctk runtime configure --runtime=docker
5、重启Docker守护进程:sudo systemctl restart docker
6、验证配置生效:cat /etc/docker/daemon.json | grep runtime,应返回"runtimes": {"nvidia": ...}结构。
三、使用nvidia-container-cli显式注入驱动节点与库路径
该方法跳过Docker daemon级runtime配置,改用命令行工具在容器启动瞬间完成设备节点绑定与CUDA库映射。适用于调试环境或CI/CD流水线中需临时启用GPU的场景,避免修改全局Docker配置。
1、确认宿主机驱动设备节点存在:ls -l /dev/nvidia*,应列出nvidiactl、nvidia-uvm、nvidia0等文件。
2、检查驱动库路径:find /usr/lib -name "libcuda.so*" 2>/dev/null | head -1
在OpenClaw上部署你的首席AI助理贾维斯(JARVIS)。针对Dell Pro Max GB10(NVIDIA DGX Spark)边缘设备优化。用于设置和配置贾维斯。
3、构造完整运行命令(以Ollama+Llama 3为例):docker run --rm --gpus all -v /usr/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu:ro -v /dev/nvidia0:/dev/nvidia0 -v /dev/nvidiactl:/dev/nvidiactl -v /dev/nvidia-uvm:/dev/nvidia-uvm ollama/ollama run llama3
4、在容器内执行:nvidia-container-cli -k -d /dev/tty info,验证输出中包含"driver_version"字段。
5、若仍失败,追加--ldcache参数强制加载宿主机CUDA库缓存:nvidia-container-cli --ldcache --load-driver --debug info
四、修正Docker Compose中GPU运行时声明方式
在docker-compose.yml中仅设置runtime: nvidia或nvidia-container-runtime不足以激活GPU支持,必须配合NVIDIA_VISIBLE_DEVICES与device_requests双机制,否则Docker Compose会忽略--gpus语义,导致容器内CUDA上下文初始化失败。
1、编辑docker-compose.yml,在对应服务下添加:runtime: nvidia
2、在同一服务下添加环境变量:environment: ["NVIDIA_VISIBLE_DEVICES=all"]
3、在deploy配置块中添加device_requests:deploy: {resources: {reservations: {devices: [{driver: "nvidia", count: -1, capabilities: ["gpu"]}]} }}
4、保存后执行:docker compose down && docker compose up -d
5、进入容器验证:docker exec -it
6、若输出显示GPU设备但显存占用为0,说明透传成功,Llama 3推理将自动启用CUDA后端。
五、禁用Docker守护进程cgroup v2限制以解除GPU设备挂载拦截
部分Linux发行版(如Ubuntu 24.04默认启用cgroup v2)会在容器初始化阶段拦截/dev/nvidia*设备节点挂载操作,导致nvidia-container-toolkit注入失败。此方案通过回退至cgroup v1兼容模式,确保运行时钩子能完整执行设备绑定流程。
1、编辑GRUB配置:sudo nano /etc/default/grub
2、在GRUB_CMDLINE_LINUX行末尾添加:systemd.unified_cgroup_hierarchy=0
3、更新GRUB:sudo update-grub
4、重启系统:sudo reboot
5、重启后验证cgroup版本:cat /proc/1/cgroup | head -1,若输出含"0::/"则为cgroup v1。
6、重新执行方案二中的nvidia-ctk runtime configure命令并重启docker服务。










