注意: 本仓库是 *** ros 镜像 的 amd64 架构构建版本。更多信息请参见镜像文档中的 "除 amd64 外的架构?" 和镜像 FAQ 中的 "镜像源在 Git 中已更改,该怎么办?"。
机器人操作系统(ROS)是一个开源项目,用于构建机器人应用程序。本 Docker 镜像是 ROS 镜像的 amd64 架构版本,基于 Ubuntu 镜像和 ROS *** Debian 软件包构建,提供了简化且一致的平台,用于开发、构建和部署分布式机器人应用。
提供多种 ROS 发行版(如 humble、jazzy、kilted、rolling)及不同功能层级的镜像变体:
ros-core:最小化 ROS 安装,包含核心组件ros-base:基础工具和库,包含 ros-core 及额外基础功能(部分发行版以此为默认标签)perception:包含感知相关功能包的扩展版本rosdep 自动解析依赖,简化第三方包集成~/.ros/),便于调试和数据留存| 标签 | Dockerfile 链接 |
|---|---|
humble-ros-core, humble-ros-core-jammy | 链接 |
humble-ros-base, humble-ros-base-jammy, humble | 链接 |
humble-perception, humble-perception-jammy | 链接 |
jazzy-ros-core, jazzy-ros-core-noble | 链接 |
jazzy-ros-base, jazzy-ros-base-noble, jazzy, latest | 链接 |
jazzy-perception, jazzy-perception-noble | 链接 |
kilted-ros-core, kilted-ros-core-noble | 链接 |
kilted-ros-base, kilted-ros-base-noble, kilted | 链接 |
kilted-perception, kilted-perception-noble | 链接 |
rolling-ros-core, rolling-ros-core-noble | 链接 |
rolling-ros-base, rolling-ros-base-noble, rolling | 链接 |
rolling-perception, rolling-perception-noble | 链接 |
本镜像适用于需要快速构建、测试和部署机器人应用的场景,包括但不限于:
amd64、arm64v8ros/ 目录创建 Dockerfile 安装预编译的 ROS 包(以 demo-nodes-cpp 和 demo-nodes-py 为例):
dockerfileFROM amd64/ros:rolling-ros-core as aptgetter # 安装 ROS 包 RUN apt-get update && apt-get install -y \ ros-${ROS_DISTRO}-demo-nodes-cpp \ ros-${ROS_DISTRO}-demo-nodes-py && \ rm -rf /var/lib/apt/lists/* # 启动 ROS 包 CMD ["ros2", "launch", "demo_nodes_cpp", "talker_listener_launch.py"]
构建与运行:
console$ docker build -t my/ros:aptgetter . $ docker run -it --rm my/ros:aptgetter [INFO] [launch]: process[talker-1]: started with pid [813] [INFO] [launch]: process[listener-2]: started with pid [814] [INFO] [talker]: Publishing: 'Hello World: 1' [INFO] [listener]: I heard: [Hello World: 1] ...
说明:所有 ROS 镜像包含默认入口点(entrypoint),会在执行命令前自动加载 ROS 环境变量(如
ROS_DISTRO)。
使用多阶段构建从源码编译 ROS 包,优化镜像体积:
dockerfileARG FROM_IMAGE=amd64/ros:rolling ARG OVERLAY_WS=/opt/ros/overlay_ws # 阶段 1:依赖推导与缓存 FROM $FROM_IMAGE AS cacher ARG OVERLAY_WS # 更新 rosdep 并配置 apt 缓存 RUN rosdep update --rosdistro $ROS_DISTRO && \ cat <<EOF > /etc/apt/apt.conf.d/docker-clean && apt-get update APT::Install-Recommends "false"; APT::Install-Suggests "false"; EOF # 克隆源码(以 ros2/demos 为例) WORKDIR $OVERLAY_WS/src RUN cat <<EOF | vcs import . repositories: ros2/demos: type: git url: [***] version: ${ROS_DISTRO} EOF # 推导构建/运行依赖 RUN bash -e <<'EOF' declare -A types=( [exec]="--dependency-types=exec" [build]="") for type in "${!types[@]}"; do rosdep install -y \ --from-paths \ ros2/demos/demo_nodes_cpp \ ros2/demos/demo_nodes_py \ --ignore-src \ --reinstall \ --simulate \ ${types[$type]} \ | grep 'apt-get install' \ | awk '{gsub(/'\''/,"",$4); print $4}' \ | sort -u > /tmp/${type}_debs.txt done EOF # 阶段 2:编译源码 FROM $FROM_IMAGE AS builder ARG OVERLAY_WS # 安装构建依赖 COPY --from=cacher /tmp/build_debs.txt /tmp/build_debs.txt RUN --mount=type=cache,target=/etc/apt/apt.conf.d,from=cacher,source=/etc/apt/apt.conf.d \ --mount=type=cache,target=/var/lib/apt/lists,from=cacher,source=/var/lib/apt/lists \ --mount=type=cache,target=/var/cache/apt,sharing=locked \ < /tmp/build_debs.txt xargs apt-get install -y # 编译源码 WORKDIR $OVERLAY_WS COPY --from=cacher $OVERLAY_WS/src ./src RUN . /opt/ros/$ROS_DISTRO/setup.sh && \ colcon build \ --packages-select \ demo_nodes_cpp \ demo_nodes_py \ --mixin release # 阶段 3:运行环境 FROM $FROM_IMAGE-ros-core AS runner ARG OVERLAY_WS # 安装运行依赖 COPY --from=cacher /tmp/exec_debs.txt /tmp/exec_debs.txt RUN --mount=type=cache,target=/etc/apt/apt.conf.d,from=cacher,source=/etc/apt/apt.conf.d \ --mount=type=cache,target=/var/lib/apt/lists,from=cacher,source=/var/lib/apt/lists \ --mount=type=cache,target=/var/cache/apt,sharing=locked \ < /tmp/exec_debs.txt xargs apt-get install -y # 配置环境 ENV OVERLAY_WS=$OVERLAY_WS COPY --from=builder $OVERLAY_WS/install $OVERLAY_WS/install RUN sed --in-place --expression \ '$isource "$OVERLAY_WS/install/setup.bash"' \ /ros_entrypoint.sh # 启动命令 CMD ["ros2", "launch", "demo_nodes_cpp", "talker_listener_launch.py"]
构建结果对比(示例):
console$ docker image ls my/ros --format "table {{.Tag}}\t{{.Size}}" TAG SIZE aptgetter 504MB # apt 安装版 runner 510MB # 源码编译版(多阶段优化后) builder 941MB # 编译阶段镜像(不用于部署)
持久化 ROS 日志目录(~/.ros/):
console$ docker run -v "/home/ubuntu/.ros/:/root/.ros/" amd64/ros
通过 --device 参数挂载硬件设备(如相机、GPU):
console$ docker run --device=/dev/video0:/dev/video0 amd64/ros # 挂载摄像头
--net=host 共享主机网络栈(简化外部通信,但降低隔离性)使用 docker compose 部署分布式 ROS 应用(发布者-订阅者模型):
~/ros_demos,放入上述 Dockerfile(aptgetter 版本)compose.yaml:yamlservices: talker: # C++ 发布者节点 build: ./ command: ros2 run demo_nodes_cpp talker listener: # Python 订阅者节点 build: ./ environment: - "PYTHONUNBUFFERED=1" # 实时输出 Python 日志 command: ros2 run demo_nodes_py listener
console# 构建并后台启动 $ docker compose up -d # 查看自动创建的网络 $ docker network inspect ros_demos_default # 查看 listener 节点日志 $ docker compose logs listener # 停止并清理 $ docker compose stop $ docker compose rm $ docker compose down # 同时删除网络
本镜像包含的软件许可证信息可通过以下途径获取:
ros/ 目录使用本镜像时,用户需自行确保遵守其中所有软件的相关许可证。

来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429