1. Apollo 8.0 Docker 安装前,先把这几个坑想清楚
Apollo 8.0 是百度开源的自动驾驶开发平台,Cyber RT 是它底层的实时通信中间件,DreamView 是配套的可视化调试面板。这套组合能让你在本地跑通激光雷达感知、视觉感知、预测规划等官方 Demo,适合自动驾驶初学者和想深入 Cyber RT 组件开发的工程师。但很多人第一次装的时候,卡在镜像拉取、容器启动、DreamView 打不开、话题没数据这几个环节,折腾一整天都进不了主界面。
我自己在 Ubuntu 20.04 + NVIDIA 驱动 525 的环境上完整走了一遍 Apollo 8.0 的 Docker 安装和 DreamView 测试,中间踩了不少坑。这篇文章把整个流程拆成可复制的步骤,包括镜像拉取、容器启动参数、DreamView 启动命令、Cyber RT 话题连通性验证,以及几个高频报错的定位方法。你跟着做,基本能在一个下午跑通官方 Demo。
先说清楚前置条件。你的机器需要满足:Ubuntu 20.04 或 22.04(官方推荐 20.04)、Docker 20.10 以上、NVIDIA 驱动 470 以上(如果用 GPU 模式)、至少 16GB 内存和 50GB 磁盘空间。CPU 模式也能跑,但感知模块会非常慢,建议还是用带 NVIDIA 显卡的机器。另外,Apollo 8.0 的镜像比较大,拉取过程可能需要稳定的网络环境,建议提前配置好 Docker 的镜像加速。
安装流程大致分四步:拉取 Apollo 8.0 的 Docker 镜像、启动容器并挂载工作空间、进入容器初始化环境、启动 DreamView 并验证话题。每一步都有容易出错的地方,下面逐个展开。
有一点要提醒:Apollo 的官方文档更新比较快,命令和路径可能随版本变化。本文基于 Apollo 8.0 的稳定版本,如果你用的是更新的版本,部分路径需要对照官方仓库调整。另外,所有命令都在宿主机的终端里执行,除非特别说明是容器内操作。
2. TaoToken 前置准备:给 Cyber RT 调试配一个顺手的模型对话入口
在跑 Apollo Demo 的过程中,你可能会遇到需要查文档、看报错含义、理解 Cyber RT 组件配置的情况。这时候有一个能快速对话的模型入口会省很多时间。TaoToken 提供了模型对话、Coding Plan、API Keys 等能力,可以作为你调试过程中的辅助工具。
具体来说,TaoToken 的模型对话功能可以帮你快速理解 Apollo 的 DAG 文件、launch 文件、proto 定义这些配置的语义。比如你看到example.dag里一堆 channel 和 component 的声明,不确定哪个字段控制数据流向,直接贴进去问,比翻文档快。Coding Plan 则适合你后续要写自己的 Cyber RT 组件时,用来生成代码骨架或排查编译错误。
接入方式很简单。你需要在 TaoToken 的控制台创建一个 API Key,然后把它配置到你的开发环境里。如果你用的是 Claude Code 或类似的编码助手,可以在 settings 里填入 Base URL 和 Key。Base URL 用https://taotoken.net/api,Key 用你创建的那串。Model ID 根据你选的模型填,比如claude-sonnet-4-20250514这类。
这里给一个 Claude Code 的配置片段,路径是~/.claude/settings.json:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "sk-你的Key", "ANTHROPIC_MODEL": "claude-sonnet-4-20250514" } }如果你用的是 Cline 或 Roo Code 这类 VS Code 插件,配置方式类似,在插件的 API Provider 里选 Anthropic Compatible,然后填 Base URL 和 Key。Codex 的话,配置文件在~/.codex/auth.json,把OPENAI_BASE_URL指向https://taotoken.net/api,OPENAI_API_KEY填你的 Key。
配好之后,你在调试 Apollo 的时候就可以随时问模型:这个报错是什么意思、这个配置项该填什么、Cyber RT 的 channel 怎么订阅。实测下来,对于理解 Apollo 的配置文件结构和报错信息,模型对话能省不少查文档的时间。
需要说明的是,TaoToken 在这里的角色是你的开发辅助工具,不是 Apollo 运行时的依赖。Apollo 本身的 Docker 容器、Cyber RT 通信、DreamView 可视化都不需要它。你完全可以先跑通 Apollo,再决定要不要配这个辅助入口。
3. 可复制配置:Apollo 8.0 Docker 镜像拉取与容器启动
这一节是核心操作部分。Apollo 8.0 官方提供了 Docker 镜像,但直接docker pull可能会因为镜像名和 tag 的问题失败。正确的做法是先确认你要用的镜像版本,然后拉取。
Apollo 8.0 的镜像在 Docker Hub 上的名字是apolloauto/apollo,tag 通常是v8.0.0或8.0.0。你可以先搜索一下:
docker search apolloauto/apollo如果搜索结果里能看到apolloauto/apollo,说明网络没问题。然后拉取指定版本:
docker pull apolloauto/apollo:v8.0.0如果拉取速度慢,可以配置 Docker 的镜像加速器。编辑/etc/docker/daemon.json:
{ "registry-mirrors": [ "https://docker.mirrors.ustc.edu.cn", "https://hub-mirror.c.163.com" ] }然后重启 Docker:
sudo systemctl daemon-reload sudo systemctl restart docker拉取完成后,用docker images确认镜像存在。接下来启动容器。Apollo 官方推荐用aem工具管理容器,但如果你不想装aem,也可以直接用docker run。这里给一个完整的docker run命令,挂载当前目录到容器的/apollo工作空间:
docker run -it --name apollo_v8 \ --gpus all \ -v /home/你的用户名/apollo_v8:/apollo \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -e DISPLAY=$DISPLAY \ -e LOCAL_USER_ID=$(id -u) \ -p 8888:8888 \ apolloauto/apollo:v8.0.0 \ /bin/bash参数说明:--gpus all让容器能用 GPU,如果你只有 CPU 就去掉这行;-v把宿主机的apollo_v8目录挂载到容器的/apollo,这样你的代码和数据不会随容器删除而丢失;-p 8888:8888把 DreamView 的端口映射出来;-e DISPLAY和-v /tmp/.X11-unix是为了让容器里的图形程序能显示到宿主机(DreamView 是 Web 界面,其实不需要,但有些工具需要)。
启动后你会进入容器的 bash。第一次进入需要初始化环境:
cd /apollo bash docker/scripts/dev_start.sh不过如果你是用上面的docker run直接进的容器,dev_start.sh可能不适用。更稳妥的方式是用 Apollo 官方的aem工具。先安装aem:
wget https://apollo-pkg-beta.bj.bcebos.com/aem/aem-install.sh bash aem-install.sh然后创建并启动容器:
aem start aem enteraem start会自动拉取镜像并启动容器,aem enter进入容器。进入后初始化工作空间:
aem init这一步会下载 Apollo 的源码和依赖,时间比较长,取决于网络。初始化完成后,你的工作空间里会有modules、cyber、tools等目录。
如果你要用 GPU 模式,用aem start_gpu代替aem start。GPU 模式需要宿主机装好 NVIDIA 驱动和nvidia-docker2,否则会报错。
容器启动后,先验证一下 Cyber RT 是否正常:
cyber_monitor如果能看到一个空的 channel 列表,说明 Cyber RT 已经跑起来了。按q退出。
4. 验证请求:DreamView 启动与 Cyber RT 话题连通性测试
DreamView 是 Apollo 的可视化面板,启动命令是:
aem bootstrap start或者如果你在容器里直接操作:
cd /apollo bash scripts/bootstrap.sh start启动成功后,终端会提示DreamView is running at http://localhost:8888。打开浏览器访问localhost:8888,应该能看到 DreamView 的界面。如果打不开,先检查端口映射是否正确,再检查容器是否在运行。
进入 DreamView 后,你需要选择正确的模式、车型和地图。对于官方 Demo,一般选Mkz Standard车型、Sunnyvale地图、RTK模式。选完后点击左侧的Module Controller,启动Transform模块。
接下来验证 Cyber RT 话题。打开另一个终端,进入容器:
docker exec -it apollo_v8 /bin/bash然后运行:
cyber_monitor你应该能看到一些 channel,比如/apollo/transform、/apollo/localization/pose等。如果 channel 列表是空的,说明模块没启动或者话题没发布。
为了测试感知模块,先下载官方提供的数据包:
wget https://apollo-system.bj.bcebos.com/dataset/6.0_edu/sensor_rgb.tar.xz mkdir -p ./data/bag/ tar -xzvf sensor_rgb.tar.xz -C ./data/bag/然后安装 DreamView 和感知模块:
buildtool install --legacy dreamview-dev monitor-dev buildtool install --legacy perception-dev安装完成后,启动激光雷达感知:
mainboard -d /apollo/modules/perception/production/dag/dag_streaming_perception_lidar.dag如果启动成功,终端会显示组件初始化日志。然后播放数据包:
cyber_recorder play -f ./data/bag/sensor_rgb.record -k /perception/vehicle/obstacles /apollo/perception/obstacles /apollo/perception/traffic_light /apollo/prediction-k参数用来屏蔽数据包中不需要的通道,只保留感知相关的。播放后,回到 DreamView,在左侧LayerMenu里打开Perception下的Point Cloud,选择对应通道,应该能看到点云和 3D 检测框。
如果点云不显示,先检查cyber_monitor里/apollo/perception/obstacles是否有数据。如果没有,说明感知模块没正常工作,去看mainboard的日志。
5. 本篇常见错排查:从 401 到模型文件缺失
这一节整理几个高频报错和解决方法。
报错一:open file failed, file path: .../point_pillars_torch/pts_voxel_encoder.zip
这是激光雷达感知模块启动时找不到模型文件。Apollo 8.0 的模型文件默认放在modules/perception/production/data/perception/lidar/models/detection/下。如果你看到类似point_pillars的文件夹名,但报错路径是point_pillars_torch,说明配置里写的路径和实际文件夹名不一致。
解决方法:把point_pillars文件夹重命名为point_pillars_torch,或者修改lidar_detection_pipeline.pb.txt里的路径配置。mask_pillars同理。
报错二:Operator (hard_voxelize) is not registered
这是 CenterPoint 模型用 Paddle 推理时出现的,原因是 Paddle 版本和模型不匹配。Apollo 8.0 的 CenterPoint 模型需要特定版本的 Paddle。如果你不是必须用 CenterPoint,可以先用 PointPillars 跑通流程。如果必须用,检查modules/perception/production/data/perception/lidar/models/detection/CenterPoint_paddle/下的文件是否完整,特别是centerpoint.pdmodel和centerpoint.pdiparams。
报错三:DreamView 打不开,浏览器显示连接被拒绝
先确认容器是否在运行:docker ps。如果容器没运行,用docker start apollo_v8启动。如果容器在运行,检查端口映射:docker port apollo_v8,确认 8888 端口映射到了宿主机。如果还是不行,进容器检查 DreamView 进程:ps aux | grep dreamview。如果没有进程,重新执行aem bootstrap start。
报错四:cyber_monitor里没有 channel
说明 Cyber RT 没有收到任何话题数据。先确认你启动了对应的模块,比如Transform、Perception。然后检查模块的 DAG 文件是否正确加载。可以用cyber_node list查看当前运行的节点。如果节点列表为空,说明模块没启动成功,去看mainboard的日志输出。
报错五:local proxy failed或401 Unauthorized
如果你在配置 TaoToken 的 API Key 时遇到 401,说明 Key 无效或过期。去 TaoToken 控制台重新创建一个 Key,然后更新你的配置文件。如果是local proxy failed,检查 Base URL 是否写成了https://taotoken.net/api,不要多加斜杠或路径。
报错六:OAuth相关错误
如果你用的是 Claude Code 的 OAuth 登录方式,但想切换到 API Key 模式,需要在 settings 里把ANTHROPIC_API_KEY填上,并确保ANTHROPIC_BASE_URL指向https://taotoken.net/api。OAuth 和 API Key 不要混用。
报错七:reading choices解析失败
这通常出现在模型返回的 JSON 格式不符合预期时。检查你的请求参数,特别是model字段是否拼写正确。如果你用的是 Coding Plan,确认 Model ID 和套餐匹配。
排查思路总结:先看日志,再查配置,最后验证网络。Apollo 的日志一般在/apollo/data/log/下,mainboard的日志会直接输出到终端。Cyber RT 的日志可以用cyber_monitor或cyber_recorder查看。
6. 语义一致 CTA:把调试入口和文档放在手边
跑通 Apollo 8.0 的 Docker 安装和 DreamView 测试后,你接下来可能会想深入 Cyber RT 组件开发,或者调试自己的感知算法。这时候有几个资源可以放在手边。
如果你需要快速查 Apollo 的配置文件和报错含义,可以用 TaoToken 的模型对话功能,把 DAG 文件或报错日志贴进去问。入口在 模型对话。
如果你要写自己的 Cyber RT 组件,或者用 Claude Code 辅助编码,可以看看 Coding Plan。API Key 的创建和管理在 API Keys。
Apollo 官方的接入文档和 Cyber RT 开发指南,可以在 接入文档 里找到对应链接。如果你用的是 Claude Code,配置参考 ClaudeCodeAnthropic。
最后提醒一句:Apollo 的 Docker 容器删除后,挂载在宿主机的/apollo目录不会丢,但容器内的环境变量和临时文件会丢。所以重要的配置和代码一定要放在挂载目录里。另外,aem工具创建的容器和手动docker run创建的容器管理方式不同,建议统一用一种方式,避免混乱。