前言
通过 Docker 安装 ROS 可以无视系统版本支持的限制(例如 Ubuntu 22.04 默认只支持 ROS2,不支持 ROS1),并能实现多个 ROS 版本的共存与隔离。
本教程将详细介绍如何通过 Docker 安装 ROS,并对关键参数进行说明。建议先了解 Docker 的基本使用方法。
一、安装 Docker
建议使用官方或社区提供的脚本安装 Docker,注意确保安装了 Docker 显卡驱动,以便在容器中使用 GPU。
二、拉取 ROS 镜像
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"
]
}
- 重启 Docker:
systemctl restart docker
三、创建 ROS 容器
3.1 使用 docker run 创建
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 等)。
四、使用容器
4.1 权限配置
默认情况下需要 sudo 权限运行 Docker。可将当前用户加入 docker 组以免 sudo:
sudo gpasswd -a $USER docker
newgrp docker
4.2 启动与进入
配置 X11 访问权限
容器内打开 Gazebo 等可视化程序需要访问宿主机的 X11 服务器:
# 允许所有本地连接访问
xhost +local:
# 或仅允许 docker 访问
xhost +local:docker
启动与进入容器
# 启动
sudo docker start <container_name>
# 进入
sudo docker exec -it <container_name> /bin/bash
配置 ROS 环境
每次进入终端需 source ROS 路径,建议写入 .bashrc:
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
测试运行:
roscore
4.3 一键启动脚本
为方便管理,可创建启动脚本。
- 创建目录:
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>
- 添加到 PATH:
echo 'export PATH=$PATH:/home/<your_username>/.docker/setup' >> ~/.bashrc
source ~/.bashrc
此后在任意终端输入容器名即可操作。进入容器后记得更新源:
sudo apt-get update
注意事项:
- 脚本中的
<your_name>需替换为实际容器名。 - 确保用户已加入 docker 组。
- 图形界面转发命令效果通常是临时的,重启 X11 服务后可能失效。


