保姆级教程:手把手解决Apollo 7.0.0在Ubuntu 20.04下的Docker权限与网络下载报错
当你第一次在Ubuntu 20.04上尝试运行Apollo 7.0.0时,可能会遇到一系列令人沮丧的报错信息。这些报错看似复杂,但实际上大多源于两个核心问题:Docker权限配置不当和网络连接不稳定。本文将带你一步步解决这些常见问题,让你能够顺利搭建Apollo开发环境。
1. 环境准备与基础配置
在开始之前,确保你的系统满足以下基本要求:
- Ubuntu 20.04 LTS(推荐使用干净安装)
- 至少16GB内存(32GB更佳)
- 100GB可用磁盘空间
- NVIDIA显卡(需支持CUDA)
1.1 Docker安装与配置
Docker是Apollo运行的基础环境,正确的安装和配置至关重要。首先安装Docker CE版本:
sudo apt-get update sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable" sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io安装完成后,配置Docker用户组以避免频繁使用sudo:
sudo groupadd docker sudo usermod -aG docker $USER newgrp docker验证配置是否成功:
docker run hello-world如果看到"Hello from Docker!"消息,说明配置正确。
1.2 NVIDIA驱动与CUDA安装
Apollo需要CUDA支持,首先安装NVIDIA驱动:
ubuntu-drivers devices sudo ubuntu-drivers autoinstall安装CUDA Toolkit 11.1(Apollo 7.0.0推荐版本):
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600 sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/7fa2af80.pub sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /" sudo apt-get update sudo apt-get -y install cuda-11-1配置环境变量:
echo 'export PATH=/usr/local/cuda-11.1/bin:$PATH' >> ~/.bashrc echo 'export LD_LIBRARY_PATH=/usr/local/cuda-11.1/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc source ~/.bashrc2. 解决Docker容器启动问题
2.1 容器启动失败排查
当你执行./docker/scripts/dev_start.sh时,可能会遇到以下错误:
Error response from daemon: Container 0ab947bcd84aa90d9e3328274ca2a40697a8e3eb84bba59c716a41bacc03112d is not running解决方法:
- 首先查看所有容器状态:
docker ps -a找到Apollo相关容器(通常名为apollo_dev_*),记录其CONTAINER ID
启动该容器:
docker start [CONTAINER_ID]如果容器不存在,则需要重新运行dev_start.sh:
./docker/scripts/dev_start.sh2.2 解决Docker权限问题
如果dev_start.sh需要sudo才能运行,说明Docker用户组配置未生效。检查当前用户是否在docker组:
groups如果输出中没有docker,尝试以下步骤:
- 重新添加用户到docker组:
sudo usermod -aG docker $USER完全注销并重新登录系统
验证:
docker run hello-world如果仍然需要sudo,可能是Docker Desktop安装冲突,考虑卸载Docker Desktop:
sudo apt-get purge docker-desktop然后重新安装Docker CE并配置用户组。
3. 解决网络下载问题
3.1 手动下载依赖包
Apollo构建过程中需要下载多个依赖包,由于网络问题可能导致下载失败。常见报错包括zlib、rules_java等包下载失败。
解决方法:
- 识别失败的包(从错误信息中获取包名和URL)
- 手动下载包到本地
- 将包移动到Apollo的缓存目录
例如,对于zlib-1.2.11.tar.gz:
- 手动下载:
wget https://github.com/madler/zlib/archive/v1.2.11.tar.gz -O zlib-1.2.11.tar.gz- 移动到缓存目录:
mkdir -p ~/apollo/.cache/distdir mv zlib-1.2.11.tar.gz ~/apollo/.cache/distdir/- 如果.cache目录不可见,显示隐藏文件:
ls -a ~/apollo/- 如果无法写入,修改权限:
sudo chmod -R 777 ~/apollo3.2 修改依赖配置文件
对于某些包,可能需要修改Apollo的依赖配置文件:
- 找到dependencies.bzl文件:
cd ~/apollo/.cache/bazel/$(ls ~/apollo/.cache/bazel)/external/rules_proto/proto/private sudo nano dependencies.bzl- 修改zlib配置:
"zlib": { "sha256": "629380c90a77b964d896ed37163f5c3a34f6e6d897311f1df2a7016355c45eff", "build_file": "@com_google_protobuf//:third_party/zlib.BUILD", "strip_prefix": "zlib-1.2.11", "urls": [ "https://github.com/madler/zlib/archive/v1.2.11.tar.gz", ], }- 对于rules_java,修改grpc_python_deps.bzl:
cd ~/apollo/.cache/bazel/$(ls ~/apollo/.cache/bazel)/external/com_github_grpc_grpc/bazel sudo nano grpc_python_deps.bzl添加以下内容:
if "rules_java" not in native.existing_rules(): http_archive( name = "rules_java", sha256 = "f5a3e477e579231fca27bf202bb0e8fbe4fc6339d63b38ccb87c2760b533d1c3", strip_prefix = "rules_java-981f06c3d2bd10225e85209904090eb7b5fb26bd", urls = [ "file:///home/$USER/apollo/.cache/distdir/rules_java-981f06c3d2bd10225e85209904090eb7b5fb26bd.tar.gz" ], )4. 解决CUDA架构不兼容问题
4.1 检查GPU架构支持
构建过程中可能出现如下错误:
nvcc fatal : Unsupported gpu architecture 'compute_89'检查支持的GPU架构:
nvcc --list-gpu-arch如果输出中没有compute_89,说明CUDA版本与显卡不兼容。
4.2 升级CUDA版本
对于较新的NVIDIA显卡(如RTX 30/40系列),需要更高版本的CUDA:
- 卸载旧版CUDA:
sudo apt-get --purge remove "*cublas*" "*cufft*" "*curand*" "*cusolver*" "*cusparse*" "*npp*" "*nvjpeg*" "cuda*" "nsight*"- 安装CUDA 12.x:
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600 sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/3bf863cc.pub sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /" sudo apt-get update sudo apt-get -y install cuda- 更新环境变量:
echo 'export PATH=/usr/local/cuda/bin:$PATH' >> ~/.bashrc echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc source ~/.bashrc- 验证安装:
nvcc --version nvcc --list-gpu-arch现在应该能看到compute_89等新架构支持。
5. 完整构建流程验证
5.1 启动开发容器
cd ~/apollo ./docker/scripts/dev_start.sh ./docker/scripts/dev_into.sh5.2 构建Apollo
在容器内执行:
./apollo.sh build_opt_gpu构建过程可能需要1-2小时,取决于硬件配置。如果遇到新的下载失败错误,重复第3节的手动下载方法。
5.3 常见构建问题解决
- 内存不足:增加swap空间或减少并行构建线程:
./apollo.sh build_opt_gpu --local_resources 2048,1.0,1.0- 磁盘空间不足:清理Docker缓存和未使用的镜像:
docker system prune -a- Python包缺失:在容器内安装所需Python包:
pip install -r /apollo/requirements.txt6. 优化与性能调优
6.1 加速后续构建
使用Bazel缓存:
echo 'build --disk_cache=/apollo/.cache/bazel-disk-cache' >> /apollo/.bazelrc6.2 监控构建资源使用
watch -n 1 "free -h && nvidia-smi && df -h"6.3 选择性构建模块
如果只需要构建特定模块:
./apollo.sh build_opt_gpu modules/planning6.4 清理构建缓存
./apollo.sh clean bazel clean --expunge