一种优雅的ROS开发方式:使用distrobox容器

不少小伙伴最近在用 ROS / ROS2 开发的时候,都碰到一个很现实的问题:新硬件越来越新,但 ROS 往往又和 Ubuntu 20.04 / 22.04 这类特定版本绑得比较死,内核、驱动和软件栈之间三角互怼,迟早出问题。

于是我想介绍一种自己用下来觉得还挺顺手的方式:在较新的 Linux 发行版上,用 distrobox 容器来跑 ROS 开发环境。

这样做几个好处很直接:

  • 宿主机可以放心用新发行版,不用为了 ROS 把系统钉死在旧 Ubuntu
  • 容器里保留 ROS 官方支持更好的 Ubuntu 环境
  • 新硬件支持更完整,NVIDIA 显卡之类的也能正常用
  • 开发环境和宿主机隔离,出问题重建也方便

下面用 Fedora 43 + ROS 2 Humble 演示。

为什么选 distrobox

distrobox 本质上是对容器的进一步封装,底层跑 Podman 或 Docker,但用起来更像是在本机里”多开了一个发行版”。

对 ROS 开发来说这个思路挺合适的:宿主机跑你喜欢的现代发行版,容器里跑 Ubuntu 22.04 和 ROS 2 Humble 的生态,文件系统、终端、GUI、显卡、开发工具都能自然接进来。比虚拟机轻,比直接装在宿主机上干净。

安装 distrobox

Fedora 自带 podman,安装很直接:

1
sudo dnf install -y git distrobox podman

确认一下两个工具都可用:

1
2
podman --version
distrobox --version

如果你用的是 Debian / Ubuntu 系,可以先装 Docker 再装 Distrobox:

1
2
3
curl -fsSL https://get.docker.com | sh
sudo apt update
sudo apt install -y distrobox

装完把当前用户加入 docker 用户组,省得每次都要 sudo

1
2
sudo usermod -aG docker $USER
newgrp docker

配置 NVIDIA 容器支持

如果需要在容器里调用 NVIDIA 显卡——无论是为了 CUDA、cuDNN、ORT,还是只是图形能力——需要额外装一下 NVIDIA 的容器桥接工具。

1. 添加 NVIDIA 官方软件源

1
curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo

2. 安装工具包

1
sudo dnf install -y nvidia-container-toolkit

3. 生成 CDI 配置文件

让 Podman 能正确识别显卡设备:

1
sudo nvidia-ctk cdi generate --output=/etc/cdi/nvidia.yaml

4. 验证

1
nvidia-ctk cdi list

输出里能看到你的 NVIDIA 设备就说明没问题。

创建 ROS 2 Humble 开发容器

创建一个带 NVIDIA 支持的 Ubuntu 22.04 容器,顺手把软件源换成清华源:

1
2
3
4
5
distrobox create \
--image ubuntu:22.04 \
--name ros2_humble \
--nvidia \
--init-hooks "sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list && sed -i 's/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list"

进入容器:

1
distrobox enter ros2_humble

安装 ROS 前的基础依赖

1
2
sudo apt update
sudo apt install -y python3-distro python3-yaml python3-pip

用鱼香 ROS 一键安装

1
wget http://fishros.com/install -O fishros && . fishros

跟着脚本走就行。国内网络环境下,这套流程比手动配源逐项装省心不少。

装完可以跑个小海龟简单测一下。

在 VS Code 里接入容器

只用终端的话到这里已经够了。如果想要完整的 IDE 体验,可以把 VS Code 直接接到容器里。

1. 启动 Podman 后台服务

1
systemctl --user enable --now podman.socket

2. 安装插件

VS Code 里装 Dev Containers 扩展。

3. 把 Docker 路径改成 Podman

打开设置,搜 docker path,找到:

Dev > Containers: Docker Path

docker 改成:

1
podman

4. 连接容器

Ctrl + Shift + P 输入:

1
Attach to Running Container

回车后选 ros2_humble,VS Code 会新开一个窗口,左下角显示 Attached Container: ros2_humble

5. 验证

Ctrl + ~ 打开集成终端,提示符类似:

1
yourname@ros2_humble:~$

这样就进去了。

处理 VS Code 里用户不对的问题

有时候终端里显示的是:

1
root@fedora:~#

遇到这种情况,先在容器里以 root 身份执行:

1
usermod -s /bin/bash yourname

yourname 换成你实际的用户名。

然后在 VS Code 远程资源管理器里右键容器,选 Open Container Configuration File,加上:

1
2
3
4
{
"updateRemoteUserUID": true,
"containerUser": "yourname"
}

后续扩展

这套基础环境跑通之后,CUDAcuDNNONNX Runtime 这些都可以继续往容器里装,宿主机始终保持干净,项目之间也互不干扰。

总的来说,如果你正被”新硬件 + 老 Ubuntu + ROS 版本绑定”这个组合反复折磨,不妨试试这条路。宿主机用新内核、新驱动,容器里保留 ROS 熟悉的 Ubuntu 环境,折腾一次,后面会省事很多。


一种优雅的ROS开发方式:使用distrobox容器
https://tinyparis.top/2026/04/08/elegant-ros-development-with-distrobox/
作者
Cain
发布于
2026年4月8日
许可协议