如何用Docker部署ROS2
自身电脑ubuntu20.04
由于工作需要humble,遂采用docker安装
安装之前可以先用鱼香ROS的一键安装代码,里面又一键安装docker以及ROS docker版
但是一键安装过程中有人可能出现报错,无法下载(比如我),所以整理一下安装的全过程
Error response from daemon: Get "https://registry-1.docker.io/v2/":
net/http: request canceled while waiting for connection(Client.Timeout exceeded while awaiting headers)
一 安装docker
安装docker这一步采用鱼香ROS的一键安装,比起网上很多帖子都好用。
安装好之后可以使用下面命令检验是否安装成功
docker --version #查询版本docker run hello-world # 下载测试镜像并输出欢迎信息
如果能成功输出 “hello-world" 即为安装成功
二 安装docker后部署ROS2
2.1安装docker后先更换源
2.1.1 新建文件 /etc/docker/daemon.json,
这个etc在计算机文件夹下,在主目录下是找不到的
2.1.2 输入国内docker hub地址。我推荐使用VS code 编辑(因为Vim不是很熟练)
{"registry-mirrors": ["https://docker.m.daocloud.io","https://dockerproxy.com","https://docker.mirrors.ustc.edu.cn","https://docker.nju.edu.cn"]
}
2.1.3 修改/etc/resolv.conf (VS code)
nameserver 114.114.114.114
nameserver 8.8.8.8
2.1.4 保存之后在终端运行命令生效修改
sudo systemctl daemon-reload
sudo systemctl restart docker
在运行过程中,需要加入docker用户组,否则会出现下面的报错(如果出现报错的请看2.2)
(没出现报错请移步2.3)
(base) hdr@hdr:~$ sudo systemctl daemon-reload
(base) hdr@hdr:~$ sudo systemctl restart docker
(base) hdr@hdr:~$ docker pull ros:humble
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.49/images/create?fromImage=docker.io%2Flibrary%2Fros&tag=humble": dial unix /var/run/docker.sock: connect: permission denied
2.2 创建 docker 用户组(若已加入可以跳过此步骤)
创建用户组
sudo groupadd docker # 如果提示组已存在可忽略
加入用户组
sudo usermod -aG docker $USER # 将用户 hdr 加入 docker 组
刷新用户组权限
newgrp docker # 立即激活组权限变更(无需重启系统)
测试
docker run hello-world # 测试非 root 权限运行容器
2.3 安装ROS2 humble版本
以下是安装 ROS2 Humble 版本的完整整理流程,结合 Docker 环境进行优化说明:
2.3.1 拉取 ROS2 Humble 镜像
docker pull ros:humble # 从官方仓库下载基础镜像
- 镜像大小约 1.2GB,耐心等待下载完成
2.3.2 创建并启动容器
docker run -it --network=host -d \-v /dev:/dev \ -v /tmp/.X11-unix:/tmp/.X11-unix \ # 允许 GUI 显示--name humble \-e DISPLAY=${DISPLAY} \ # 传递显示变量--restart=always \ # 自动重启ros:humble \/bin/bash # 启动 Bash Shell
- 关键参数说明:
--network=host
:容器共享宿主机网络,避免端口映射问题-v /tmp/.X11-unix
:必需用于 RViz/RQT 等 GUI 工具
2.3.3 配置 X11 权限
xhost +local: # 安全模式:仅允许本地用户访问 X Server
2.3.4 进入容器环境
docker ps -a # 查看容器 ID(我的是 e06329ced499)
docker exec -it e06329ced499 /bin/bash # 进入容器 这个e06329ced499是容器ID,需要换成自己的
#注意e06329ced499后面有个空格 这个命令接收两个参数 e06329ced499 和 /bin/bash
2.3.5 创建 用户
useradd -m -s /bin/bash ubuntu # 创建用户
passwd ubuntu # 设置密码(输入两次)
usermod -aG sudo ubuntu # 赋予 sudo 权限
2.3.6. 更新系统及安装依赖
apt-get update -y && apt-get upgrade -y # 更新软件包
apt-get install vim -y # 安装文本编辑器
apt-get install ros-humble-desktop-full -y # 安装完整桌面版
ros-humble-desktop-full
包含 RViz、Gazebo 等可视化工具
2.3.7 配置环境变量
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc # 永久生效
source ~/.bashrc # 立即加载环境
2.3.8. 验证安装
ros2 run turtlesim turtlesim_node #ROS2最最熟悉的小海龟
如果能出现一只可爱的小海龟,那么说明你成功了!
好了,这些就是我这两天遇到的坑。