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

基于Ubuntu22.04的CUDA+ROS2 Humble Docker镜像构建求助

问题

我正尝试搭建基于nvidia/cudagl镜像并集成ROS2 Humble发行版的Docker镜像,用于后续具备NVIDIA GPU能力的Gazebo仿真。问题在于官方nvidia/cudagl镜像基于Ubuntu20.04,而ROS2 Humble要求Ubuntu22.04,导致无法正常构建镜像。

我曾尝试以下方法但均未成功:

  • 以nvidia/cudagl:11.4.2-base-ubuntu20.04为基础镜像,在本地Ubuntu22.04系统上通过源码安装ROS2 Humble;
  • 基于Ubuntu22.04手动构建cudagl镜像(附失败的Dockerfile);
  • 参考过一篇过时文章,但未解决问题。

请问如何实现基于Ubuntu22.04的cudagl镜像层,再叠加ROS2 Humble,达成类似层级结构的镜像?

解决方案

核心思路

放弃手动构建cudagl镜像,直接使用NVIDIA官方提供的Ubuntu22.04版本的CUDA镜像(内置OpenGL支持)作为基础,再叠加ROS2 Humble的安装,这是最稳定且高效的方案。

完整Dockerfile示例

# 基础镜像:Ubuntu22.04 + CUDA 11.8 + cuDNN 8(含OpenGL支持)
FROM nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu22.04

# 配置非交互式安装环境
ENV DEBIAN_FRONTEND=noninteractive
ENV ROS_DISTRO=humble

# 安装系统依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
    build-essential \
    cmake \
    git \
    wget \
    curl \
    gnupg2 \
    lsb-release \
    && rm -rf /var/lib/apt/lists/*

# 添加ROS2 Humble软件源
RUN curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg \
    && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/ros2.list > /dev/null

# 安装ROS2 Humble基础包与Gazebo仿真依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
    ros-humble-ros-base \
    ros-humble-gazebo-ros-pkgs \
    ros-humble-gazebo-dev \
    && rm -rf /var/lib/apt/lists/*

# 自动加载ROS环境变量
RUN echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc

# 配置GPU能力映射(确保Gazebo能调用CUDA与OpenGL)
ENV NVIDIA_VISIBLE_DEVICES all
ENV NVIDIA_DRIVER_CAPABILITIES compute,graphics,utility

# 恢复交互式前端设置
ENV DEBIAN_FRONTEND=dialog

构建与运行命令

构建镜像

docker build -t ros2-humble-gazebo-cuda .

运行容器(需提前安装nvidia-docker2)

docker run --gpus all -it --rm --net=host --env="DISPLAY" --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" ros2-humble-gazebo-cuda

关键注意事项

  • 无需手动构建cudagl镜像:NVIDIA官方的Ubuntu22.04 CUDA镜像已经内置了OpenGL相关依赖,完全满足Gazebo的GPU渲染需求;
  • CUDA版本选择:可以根据需求替换镜像标签,比如nvidia/cuda:12.1.1-cudnn8-runtime-ubuntu22.04,只要是基于Ubuntu22.04的CUDA镜像即可;
  • GPU运行依赖:必须使用nvidia-docker2工具运行容器,否则无法正确映射GPU硬件和驱动能力。

内容的提问来源于stack exchange,提问作者Jacob Yaacubov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 21:47:51