
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
该镜像运行OLO Appliance。本指南仅专注于如何运行镜像及可配置的选项。
olorobotics/olo-appliance:humble-latestolorobotics/olo-appliance:jazzy-latestbashdocker pull olorobotics/olo-appliance:humble-latest docker run -d \ --net=host \ --name olo-appliance \ -e OLO_APL_AUTH_USERNAME="you@example.com" \ -e OLO_APL_AUTH_PASSWORD="your-password" \ -e OLO_APL_APPLIANCE_NAME="My Appliance" \ -v olo-data:/data \ olorobotics/olo-appliance:humble-latest
此命令使用olo-data Docker卷启动设备,实现持久化存储。
yamlservices: olo-appliance: image: olorobotics/olo-appliance:humble-latest container_name: olo-appliance network_mode: host environment: OLO_APL_AUTH_USERNAME: "you@example.com" OLO_APL_AUTH_PASSWORD: "your-password" OLO_APL_APPLIANCE_NAME: "My Appliance" volumes: - olo-data:/data restart: unless-stopped volumes: olo-data: driver: local
设备启动需要以下环境变量:
OLO_APL_AUTH_USERNAME - OLO账户用户名/***OLO_APL_AUTH_PASSWORD - OLO账户密码OLO_APL_APPLIANCE_NAME - 设备实例名称(例如:My Appliance)如果任何变量缺失或无效,设备将在启动时失败并退出,同时显示错误信息。
默认情况下,设备在localhost:9090启动内置rosbridge服务器。可配置为使用外部rosbridge服务器:
OLO_APL_ROSBRIDGE_HOST - Rosbridge服务器主机名(默认:localhost)OLO_APL_ROSBRIDGE_PORT - Rosbridge服务器端口(默认:9090)OLO_APL_DISABLE_LOCAL_ROSBRIDGE - 设置为true以禁用内置rosbridge服务器注意:也可通过OLO UI的维护窗口配置rosbridge设置。但通过UI修改rosbridge主机/端口时需谨慎 - 设置必须从容器视角有效。例如,使用主机网络时,localhost指主机;使用桥接网络并端口映射时,可能需要使用容器内部网络地址或host.docker.internal(Docker Desktop)访问主机服务。
连接外部rosbridge示例:
bashdocker run -d \ --net=host \ --name olo-appliance \ -e OLO_APL_AUTH_USERNAME="you@example.com" \ -e OLO_APL_AUTH_PASSWORD="your-password" \ -e OLO_APL_APPLIANCE_NAME="My Appliance" \ -e OLO_APL_ROSBRIDGE_HOST="192.168.1.100" \ -e OLO_APL_ROSBRIDGE_PORT="9090" \ -e OLO_APL_DISABLE_LOCAL_ROSBRIDGE="true" \ -v olo-data:/data \ olorobotics/olo-appliance:humble-latest
OLO_APL_USE_SIM_TIME - 设置为true以使用仿真时间(默认:false)ROS_DOMAIN_ID - 用于DDS通信的ROS 2域ID(默认:0)控制主题发布速率以管理带宽:
OLO_APL_TOPIC_DEFAULT_THROTTLE_HZ - 所有主题的默认限流频率(Hz)(未设置或0表示禁用)OLO_APL_TOPIC_HANDLING_JSON - 完整的主题处理配置(JSON格式)主题处理配置示例:
bashdocker run -d \ --net=host \ --name olo-appliance \ -e OLO_APL_AUTH_USERNAME="you@example.com" \ -e OLO_APL_AUTH_PASSWORD="your-password" \ -e OLO_APL_APPLIANCE_NAME="My Appliance" \ -e OLO_APL_TOPIC_HANDLING_JSON='{"defaultThrottleFrequency": 20, "throttleTopics": {"/odom": 10, "/camera/image_raw": 5}, "throttleDataTypes": {"sensor_msgs/msg/PointCloud2": 2}}' \ -v olo-data:/data \ olorobotics/olo-appliance:humble-latest
主题处理选项:
defaultThrottleFrequency - 所有主题的默认限流频率(Hz)throttleTopics - 按主题限流(优先级最高)throttleDataTypes - 按消息类型限流(优先级次之)配置优先级:throttleTopics > throttleDataTypes > defaultThrottleFrequency
设备可加载外部ROS2工作区,使其能够识别机器人的自定义消息类型、服务和包。当机器人使用设备需要理解的自定义接口时,这一点至关重要。
设置ROS2_WS_PATH环境变量指向容器内的ROS2工作区。设备启动时,会在加载基础ROS发行版后,加载$ROS2_WS_PATH/install/setup.bash。
推荐方法是使用包含已构建ROS2工作区的共享Docker卷。机器人驱动容器可导出其工作区,设备可只读导入:
yamlservices: olo-appliance: image: olorobotics/olo-appliance:humble-latest network_mode: host environment: OLO_APL_AUTH_USERNAME: "you@example.com" OLO_APL_AUTH_PASSWORD: "your-password" OLO_APL_APPLIANCE_NAME: "My Appliance" ROS2_WS_PATH: /shared/workspace volumes: - olo-data:/data - ros-workspace:/shared/workspace:ro # 只读访问共享工作区 my-robot-driver: image: my-robot-driver:humble-latest network_mode: host environment: EXPORT_WORKSPACE: "1" # 驱动启动时导出工作区 volumes: - ros-workspace:/shared/workspace:rw # 读写权限以填充工作区 volumes: olo-data: driver: local ros-workspace: driver: local
关键点:
rw)方式挂载共享卷并导出已构建工作区ro)方式挂载同一卷,并通过ROS2_WS_PATH加载常见部署模式是OLO Appliance与一个或多个容器化机器人驱动一起运行。所有容器共享主机网络,以确保ROS 2 DDS发现正常工作。
以下示例展示设备与机器人驱动一起运行,使用共享ROS工作区卷:
yamlservices: olo-appliance: image: olorobotics/olo-appliance:humble-latest init: true restart: unless-stopped stop_signal: SIGINT stop_grace_period: 40s network_mode: host environment: OLO_APL_AUTH_USERNAME: "you@example.com" OLO_APL_AUTH_PASSWORD: "your-password" OLO_APL_APPLIANCE_NAME: "My Appliance" ROS_DOMAIN_ID: 55 ROS_AUTOMATIC_DISCOVERY_RANGE: SUBNET FASTDDS_BUILTIN_TRANSPORTS: UDPv4 ROS_LOCALHOST_ONLY: 0 ROS2_WS_PATH: /shared/workspace volumes: - olo-appliance-data:/data - ros-workspace:/shared/workspace:ro my-robot-driver: image: your-robot-driver:humble-latest init: true restart: unless-stopped stop_signal: SIGINT stop_grace_period: 40s network_mode: host environment: ROS_DOMAIN_ID: 55 ROS_AUTOMATIC_DISCOVERY_RANGE: SUBNET FASTDDS_BUILTIN_TRANSPORTS: UDPv4 ROS_LOCALHOST_ONLY: 0 volumes: - ros-workspace:/shared/workspace:rw # 如果驱动需要硬件访问: # devices: # - "/dev/ttyUSB0:/dev/ttyUSB0" volumes: ros-workspace: driver: local olo-appliance-data: driver: local
network_mode: host - ROS 2 DDS发现需要,确保容器间及与主机/LAN节点通信ROS_DOMAIN_ID - 所有容器和外部ROS节点必须匹配ROS_AUTOMATIC_DISCOVERY_RANGE: SUBNET - 允许在本地子网内发现节点FASTDDS_BUILTIN_TRANSPORTS: UDPv4 - 强制使用UDP传输(见故障排除)ros-workspace卷 - 用于自定义消息类型的共享工作区init: true - 正确处理信号以实现优雅关闭bash# 启动所有服务 docker compose up -d # 仅启动设备 docker compose up -d olo-appliance # 查看日志 docker compose logs -f
推荐:主机网络
大多数设置中,使用主机网络(--net=host或network_mode: host)运行设备。当机器人位于同一网络的另一台计算机上时,这是ROS 2 DDS发现正常工作所必需的,因为容器需要接收多播数据包以进行节点发现。
在此模式下不使用-p端口映射;容器直接共享主机的网络栈。
可选:诊断/健康API(仅桥接网络)
如果选择不使用主机网络(Docker桥接模式),设备在容器内的8443端口公开内部HTTP端点。
要在桥接模式下从容器外部访问(用于基本健康检查),可发布端口:
bashdocker run -d \ --name olo-appliance \ -e OLO_APL_AUTH_USERNAME="you@example.com" \ -e OLO_APL_AUTH_PASSWORD="your-password" \ -e OLO_APL_APPLIANCE_NAME="My Appliance" \ -v olo-data:/data \ -p 9443:8443 \ olorobotics/olo-appliance:humble-latest
然后例如:
bashcurl http://localhost:9443/health
发布此端口是可选的,正常运行不需要。
ROS 2 / DDS网络(重要)
Docker默认桥接网络阻止多播流量,而ROS 2 DDS依赖多播进行节点发现。如果机器人运行在同一网络的另一台计算机上,不使用主机网络时设备将无法发现机器人。
使用主机网络时,不使用-p端口映射(容器直接共享主机端口)。
设备将所有持久数据存储在容器内的/data目录下。此统一目录包含:
/data/recordings/rosbags - ROS bag记录/data/script-logs - 脚本执行日志/data/cached-scripts - 缓存的脚本/data/scheduled-scripts - 计划脚本数据/data/cache/olo-client - OLO客户端缓存推荐:使用命名卷实现重启间的数据持久化:
bashdocker volume create olo-data docker run -d \ --net=host \ --name olo-appliance \ -e OLO_APL_AUTH_USERNAME="you@example.com" \ -e OLO_APL_AUTH_PASSWORD="your-password" \ -e OLO_APL_APPLIANCE_NAME="My Appliance" \ -v olo-data:/data \ olorobotics/olo-appliance:humble-latest
或使用Docker Compose:
yamlservices: olo-appliance: image: olorobotics/olo-appliance:humble-latest network_mode: host environment: OLO_APL_AUTH_USERNAME: "you@example.com" OLO_APL_AUTH_PASSWORD: "your-password" OLO_APL_APPLIANCE_NAME: "My Appliance" volumes: - olo-data:/data volumes: olo-data: driver: local
如果ROS 2节点无法相互发现(主题不可见、服务未找到),尝试强制DDS传输为UDPv4:
yamlenvironment: FASTDDS_BUILTIN_TRANSPORTS: UDPv4
或通过命令行:
bashdocker run -d \ --net=host \ --name olo-appliance \ -e OLO_APL_AUTH_USERNAME="you@example.com" \ -e OLO_APL_AUTH_PASSWORD="your-password" \ -e OLO_APL_APPLIANCE_NAME="My Appliance" \ -e FASTDDS_BUILTIN_TRANSPORTS="UDPv4" \ -v olo-data:/data \ olorobotics/olo-appliance:humble-latest
这在以下情况特别有用:
如需更多ROS 2发现控制:
yamlenvironment: ROS_DOMAIN_ID: 55 # 所有节点保持一致 ROS_AUTOMATIC_DISCOVERY_RANGE: SUBNET # 发现本地子网节点 ROS_LOCALHOST_ONLY: 0 # 允许非本地主机通信 FASTDDS_BUILTIN_TRANSPORTS: UDPv4 # 强制UDP传输
.env文件中的凭据docker logs olo-appliance-p 9443:8443您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。




来自真实用户的反馈,见证轩辕镜像的优质服务