You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 22.04下Docker容器无法访问GPU的技术求助

ROS2 Humble容器无法访问GPU排查方案

核心问题确认

主机环境(Ubuntu22.04 + NVIDIA 570驱动 + CUDA12.4)GPU功能正常,docker run --gpus all启动的测试容器可正常访问GPU,但自定义ROS2 Humble容器虽能显示nvidia-smi和CUDA12.4信息,GPU却无法被ROS2节点调用。以下是针对性排查与解决步骤:

1. 验证容器是否使用NVIDIA运行时

即使/etc/docker/daemon.json设置了默认nvidia运行时,Docker Compose仍可能未正确继承:

  • 执行命令检查容器运行时:
    docker inspect <你的ROS2容器ID> | grep -A 2 "Runtime"
    
  • 若输出为"Runtime": "runc"而非"nvidia",需在docker-compose.yml对应service中显式指定:
    services:
      your_ros2_service:
        runtime: nvidia  # 强制指定nvidia运行时
        # 其他配置项...
    

2. 检查容器内GPU相关环境变量

nvidia-smi能运行不代表ROS2进程可识别GPU,需确认关键环境变量:

  • 进入容器执行:
    echo $CUDA_VISIBLE_DEVICES
    echo $LD_LIBRARY_PATH
    
  • 正常状态下,CUDA_VISIBLE_DEVICES应为0或all;LD_LIBRARY_PATH需包含/usr/local/nvidia/lib64和/usr/lib/x86_64-linux-gnu/nvidia。
  • 若变量缺失,可在docker-compose.yml中添加:
    environment:
      - CUDA_VISIBLE_DEVICES=all
      - LD_LIBRARY_PATH=/usr/local/nvidia/lib64:/usr/lib/x86_64-linux-gnu/nvidia:$LD_LIBRARY_PATH
    

3. 验证GPU设备文件权限

ROS2进程可能因权限不足无法访问/dev/nvidia*设备:

  • 容器内执行:
    ls -l /dev/nvidia*
    
  • 若文件权限为root:root且ROS2以非root用户运行,可尝试:
    • 在Dockerfile中将用户加入video组:
      RUN usermod -aG video <你的容器用户名>
      
    • 或在docker-compose.yml中添加设备映射:
      devices:
        - /dev/nvidia0:/dev/nvidia0
        - /dev/nvidiactl:/dev/nvidiactl
        - /dev/nvidia-uvm:/dev/nvidia-uvm
      

4. 排查Dockerfile构建冲突

Dockerfile中的操作可能覆盖NVIDIA库路径或安装冲突依赖:

  • 检查是否有修改LD_LIBRARY_PATH的语句,确保未覆盖NVIDIA运行时挂载的路径。
  • 避免安装与CUDA冲突的系统级GPU包(如nvidia-cuda-toolkit),应依赖NVIDIA运行时挂载的CUDA环境。
  • 确保基础镜像支持NVIDIA运行时(推荐使用nvidia/cuda:12.4.0-runtime-ubuntu22.04作为基础,再安装ROS2 Humble)。

5. 验证GPU硬件可访问性(排除ROS2节点问题)

先确认容器内GPU本身可被CUDA程序调用,再排查ROS2节点:

  • 在容器内安装CUDA示例并运行deviceQuery:
    apt-get update && apt-get install -y cuda-samples-12-4
    cd /usr/local/cuda-12.4/samples/1_Utilities/deviceQuery
    make && ./deviceQuery
    
  • 若输出显示Result = PASS,说明GPU硬件访问正常,问题出在ROS2节点配置(如节点未启用GPU加速、未指定GPU设备)。

6. Docker Compose GPU配置细节检查

确保docker-compose.yml的GPU资源配置正确:

services:
  your_ros2_service:
    # 其他配置项...
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]

注意:deploy配置需Docker Compose v2+或Swarm模式支持,旧版Compose需改用runtime: nvidia配置。


内容的提问来源于stack exchange,提问作者prarthana sigedar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 03:27:30