Ubuntu 下使用 Docker 安装任意版本 ROS 及一键启动教程
在 Ubuntu 系统下利用 Docker 容器技术安装任意版本 ROS,实现多版本隔离与共存。教程涵盖 Docker 环境搭建、国内镜像源配置方法、ROS 镜像拉取、容器创建参数详解(含 GPU 支持、X11 图形界面转发、权限设置),并提供一键启动脚本方案简化日常操作。重点解决网络超时、用户权限及图形界面显示问题,确保 ROS 功能正常运行。

在 Ubuntu 系统下利用 Docker 容器技术安装任意版本 ROS,实现多版本隔离与共存。教程涵盖 Docker 环境搭建、国内镜像源配置方法、ROS 镜像拉取、容器创建参数详解(含 GPU 支持、X11 图形界面转发、权限设置),并提供一键启动脚本方案简化日常操作。重点解决网络超时、用户权限及图形界面显示问题,确保 ROS 功能正常运行。

通过 Docker 安装 ROS 可以无视系统版本支持的限制(例如 Ubuntu 22.04 默认只支持 ROS2,不支持 ROS1),并能实现多个 ROS 版本的共存与隔离。
本教程将详细介绍如何通过 Docker 安装 ROS,并对关键参数进行说明。建议先了解 Docker 的基本使用方法。
建议使用官方或社区提供的脚本安装 Docker,注意确保安装了 Docker 显卡驱动,以便在容器中使用 GPU。
sudo docker pull osrf/ros:noetic-desktop-full
本教程以 ROS Noetic 版本为例,其他版本需更换对应的镜像名称。ROS 镜像命名通常为 osrf/ros:版本号-desktop-full。
常用版本示例:
osrf/ros:melodic-desktop - ROS Melodic 桌面全功能版osrf/ros:kinetic-desktop - ROS Kinetic 桌面全功能版osrf/ros:humble-desktop - ROS2 Humble 桌面全功能版osrf/ros:foxy-desktop - ROS2 Foxy 桌面全功能版若拉取镜像失败(如连接超时),可能需要更换国内镜像源。
bash <(wget -qO- https://xuanyuan.cloud/docker.sh)
sudo nano /etc/docker/daemon.json
{
"registry-mirrors": [
"https://xxxxx.cn",
"https://xxxxx.cn"
]
}
systemctl restart docker
sudo docker run -dit \
--gpus all \
-e NVIDIA_DRIVER_CAPABILITIES=all \
--name=<your_name> \
-v /dev:/dev \
-v /home/<your_username>:/home/<your_username> \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY=unix$DISPLAY \
-w /home/<your_username> \
osrf/ros:noetic-desktop-full
参数说明:
-dit:后台运行并分配伪终端。--gpus all:分配所有可用 GPU 硬件。-e NVIDIA_DRIVER_CAPABILITIES=all:允许容器使用所有 NVIDIA 驱动功能。--name:指定容器名称。-v /dev:/dev:挂载宿主机设备目录,解决 USB 等设备挂载问题。-v /home/...:挂载用户目录,方便文件访问。-v /tmp/.X11-unix:挂载 X11 sockets,支持图形界面显示。-e DISPLAY:设置显示环境变量。-w:设置工作目录。osrf/ros:...:镜像名称。可选参数:
--privileged:给予容器 root 权限(存在安全风险,实验环境慎用)。--net=host:使用宿主机网络模式。--restart:设置容器重启策略(no, on-failure, always 等)。默认情况下需要 sudo 权限运行 Docker。可将当前用户加入 docker 组以免 sudo:
sudo gpasswd -a $USER docker
newgrp docker
容器内打开 Gazebo 等可视化程序需要访问宿主机的 X11 服务器:
# 允许所有本地连接访问
xhost +local:
# 或仅允许 docker 访问
xhost +local:docker
# 启动
sudo docker start <container_name>
# 进入
sudo docker exec -it <container_name> /bin/bash
每次进入终端需 source ROS 路径,建议写入 .bashrc:
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
测试运行:
roscore
为方便管理,可创建启动脚本。
cd ~/.docker/setup
#!/bin/bash
xhost +local:docker
echo "请输入指令控制<your_name>容器:启动 (s) 重启 (r) 进入 (e) 关闭 (c):"
read choose
case $choose in
s) docker start <your_name>;;
r) docker restart <your_name>;;
e) docker exec -it <your_name> /bin/bash;;
c) docker stop <your_name>;;
esac
newgrp docker
sudo chmod +x <script_name>
echo 'export PATH=$PATH:/home/<your_username>/.docker/setup' >> ~/.bashrc
source ~/.bashrc
此后在任意终端输入容器名即可操作。进入容器后记得更新源:
sudo apt-get update
注意事项:
<your_name> 需替换为实际容器名。
微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online