docker容器中安装ROS1

docker容器中安装ROS1

docker是一种虚拟化容器技术。docker基于镜像,可以秒级启动各种容器,每一种容器都是一个完整的运行环境,容器之间互相隔离。

一、安装docker

建议直接使用小鱼的一键安装

执行一键安装命令之后,会出现选择安装选项,输入8选择安装docker。安装完成之后,可以输入

bash 复制代码
docker --version

查看docker版本。

启动docker守护进程

bash 复制代码
# 启动 Docker 守护进程
sudo systemctl start docker

验证docker是否守护进程成功

bash 复制代码
sudo systemctl status docker

若输出包含activate(running)(绿色字体),说明docker守护进程正常运行

二、拉取ROS镜像

我拉取的是noetic版本的

bash 复制代码
sudo docker pull osrf/ros:noetic-desktop-full

拉取镜像时出现报错:Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded
原因:docker的官方源国内封了,导致无法拉取到镜像。

拉取ROS镜像一直超时

配置加速地址:适用于Ubuntu 16.04+、Debian 8+、CentOS 7+

使用以下命令设置registry mirror:但是需要重启docker服务

bash 复制代码
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
        "https://do.nark.eu.org",
        "https://dc.j8.work",
        "https://docker.m.daocloud.io",
        "https://dockerproxy.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://docker.nju.edu.cn"
    ]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

查看镜像名:

bash 复制代码
sudo docker images

会出现:

三、创建+启动ROS容器

<your_name>:创建容器的名字

<your_username>:当前用户名

bash 复制代码
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
Tip1:上一行对应自己的镜像名,需要修改,通过sudo docker images查看
Tip2: 后面可以跟一些容器启动后想运行的命令(如果有命令上一行最后别忘了加换行符)

# 可选参数:
--privileged  \
--net=host \
--restart=xxx \

由于我使用的是虚拟机,没有GPU,因此我输入的是:

bash 复制代码
sudo docker run -dit \
--name=ros1_noetic_livox \
--privileged \
--net=host \
--restart=unless-stopped \
-v /dev:/dev \
-v /home/reenrr:/home/reenrr \
-v /tmp/.X11-unix:/tmp/.X11-unix  \
-e DISPLAY=unix$DISPLAY \
-w /home/reenrr \
osrf/ros:noetic-desktop-full

这是创建和启动一体化的docker命令。可通过:

bash 复制代码
sudo docker ps

查看是否启动了该容器,若能看到 ros1_noetic_livox 对应的记录,状态为 Up,说明容器启动成功。

如果是已有容器了,只启动容器的话,输入:

bash 复制代码
sudo docker start 容器id/名称

四、使用容器

进入容器:

bash 复制代码
sudo docker exec -it 容器名称 /bin/bash
# (输入 exit 可以退出容器)

验证ROS环境

进入容器后,执行以下命令激活ROS并启动核心节点:

bash 复制代码
source /opt/ros/noetic/setup.bash
roscore

保持roscore运行,这个终端窗口不要关闭(roscore是ROS节点通信的核心,关闭后其他节点无法正常工作),后续操作打开新的终端。

打开两个新的终端,都需要进入容器,并且激活ROS,然后可以分别输入以下命令:

bash 复制代码
rosrun turtlesim turtlesim_node
bash 复制代码
rosrun turtlesim turtle_teleop_key

就可以实现ROS的小乌龟操作了

相关推荐
天天进步201517 小时前
Tunnelto 源码解析 #9:控制服务器设计:Warp、WebSocket、Ping/Pong 与连接保活
运维·服务器·websocket
My is 李豆18 小时前
CentOS 7 安装 Docker 完整教程(含 docker-compose 插件)
docker·eureka·centos
极客先躯18 小时前
高级java每日一道面试题-2026年02月01日-实战篇[Docker]-Docker Volume 的生命周期管理是怎样的?
java·运维·docker·容器·持久化·架构图·容器卷
Java面试题总结18 小时前
Linux-Ubantu-贴士-apt的地盘
linux·运维·服务器
志栋智能19 小时前
超自动化巡检:提升MTTR,缩短业务影响时间
运维·自动化
kong@react19 小时前
Rocky Linux 10.2 全面解析:企业级 CentOS 替代方案及保姆级docker安装
java·linux·运维·docker
睡不醒男孩03082320 小时前
第八篇:如何构建一站式 PostgreSQL 性能优化与智能管控平台?从盲目排查到 CLup 自动化运维演进
运维·postgresql·性能优化
某林21220 小时前
Isaac Sim 5.1.0 无头服务器部署与 RTX 显存段错误排障全记录
运维·服务器·docker·容器·isaac
m0_7381207220 小时前
Docker 环境下 Vulfocus 靶场搭建全流程(附镜像源问题解决方案)
运维·服务器·网络·安全·docker·容器
simeple20 小时前
记一次 Docker Compose 项目迁移:从 Windows Docker Desktop 迁移到 CentOS 服务器
docker