基于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
相关产品推荐
相关产品推荐

