前言
官方的安装说明:
官方的安装说明
安装前,请确认安装的硬件:
- CPU with 8 cores
- 16GB RAM
- [Optional] NVIDIA GPU (4GB RAM)
满足需求
1. 安装软件依赖
这一步主要是安装三个软件:
- Docker
- NVIDIA Container Toolkit (preferred)
- NVIDIA CUDA 12 compatible GPU Driver (preferred)
1.1 安装 Docker
步骤:
卸载旧版本(若有):
sudo apt-get remove docker docker-engine docker.io containerd runc
安装依赖工具:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release
添加 Docker 官方 GPG 密钥和仓库:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
安装 Docker Engine:
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
将用户加入 docker 组(避免每次用 sudo):
sudo usermod -aG docker $USER
newgrp docker # 刷新当前会话
✅ 验证 Docker 安装:
docker run --rm hello-world
成功标志:输出 Hello from Docker! 及相关信息。
1.2 安装 NVIDIA GPU 驱动(CUDA 12 兼容版本)
步骤:
查看推荐驱动版本:
ubuntu-drivers list
安装支持 CUDA 12 的驱动(如 nvidia-driver-535):
sudo apt install nvidia-driver-535
注:具体版本需参考 NVIDIA 官网。驱动版本 ≥525.60.13 通常兼容 CUDA 12。
重启系统:
sudo reboot
✅ 验证驱动安装:
nvidia-smi
成功标志:
输出 GPU 信息表格。
顶部显示 CUDA Version: 12.x(表示驱动兼容 CUDA 12)。
1.3 安装 NVIDIA Container Toolkit
步骤:
-
添加仓库和密钥:
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - distribution=$(. /etc/os-release;echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
- 安装工具包:
sudo apt-get update sudo apt-get install -y nvidia-container-toolkit
- 重启 Docker:
sudo systemctl restart docker
✅ 验证 NVIDIA Container Toolkit:
docker run --rm --gpus all nvidia/cuda:11.0.3-base nvidia-smi
- 成功标志:输出与宿主机相同的
nvidia-smi
表格(GPU 访问正常)。
最后一步,验证不成功,类似于下面的错误,
错误原因是docker没有办法连接网络,修改如下:
1. 确保自己能科学上网,并有代理的连接
2. 修改docker的服务器链接,如果没有文件就新建一个文件,确保/etc/docker/daemon.json,如下图所示。
具体的内容:
{
"registry-mirrors": [
"https://docker.nju.edu.cn",
"https://do.nark.eu.org",
"https://dockerproxy.com",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://2a6bf1988cb6428c877f723ec7530dbc.mirror.swr.myhuaweicloud.com",
"https://docker.m.daocloud.io",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com",
"https://dockerhub.icu",
"https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc"
]
}
3. 新建docker代理
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf <<EOF
[Service]
Environment="HTTP_PROXY=http://<代理IP>:<端口>"
Environment="HTTPS_PROXY=http://<代理IP>:<端口>"
EOF
sudo systemctl daemon-reload && sudo systemctl restart docker
注意:这个时候需要代理(科学上网),最终结果如下图所示。
4. 修复GPG密钥与仓库配置
重新添加Docker官方GPG密钥
密钥过期会导致仓库验证失败:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
修正仓库地址格式
确保路径包含 signed-by 参数(Ubuntu 22.04+必需):
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list
做完上面的事情后,使用下面两个命令,进行测试,确保docker工作正常
docker pull nginx:latest
docker pull ubuntu:latest
如果上面的两个命令,可以,但是
docker run --rm --gpus all nvidia/cuda:11.0.3-base nvidia-smi
还是不可以的话,很有可能是网络问题,换个时间,换个网络试试。我出现了上面的问题,晚上能拉取Nginx和Ubuntu,但是就是不能拉取nvidia的镜像。第二天,中午,就可以了,可能是代理服务器换了代理。
最终成功的结果,如下图所示。
2. 拉取镜像
2.1 总体思路
直接在国内拉取镜像是不能完成的,由于网络原因,即使是能科学*上*网,也是不行的。因此,需要借助国内的云服务商提供的服务,先把镜像拉到国内云服务商上,然后,再从云服务商上拉取镜像。
为了在云服务商商拉取镜像,就需要先在GitHub上建一个仓库,并在GitHub仓库上创建一个Dockefile文件,便可以,下面进行具体的说明。
说明:
1. 上面的说法是再测试前给出的思路,以上思路整体做完后,腾讯云还是不能从autoware官网拉取其官网的docker镜像;
2. 最终的解决方案还是直接从docker镜像的官网拉取镜像,详见2.3节最后部分及2.4节
2.2 建立GitHub仓库
在GitHub上新建一个仓库,如下图所示,点击New。
选择公用仓库,其它默认。
点击创建仓库,根据GitHub给出的命令,在本地创建git仓库,并同步到GitHub,具体操作流程,参考下图。
注意:在该仓库中,就只有一个文件,放置的是Dockerfile,内容是根据海外dock的文件位置,构建自己Dock的地址。
如:构建autoware的镜像,则:
FROM ghcr.io/autowarefoundation/autoware:universe-devel-cuda
2.3 建立腾讯云容器镜像服务
登录腾讯云后,在控制台检索“镜像”,进入容器镜像服务,首先,新建命名空间。新建命名空间的时候,一定要注意,一定要选择北美的地理位置,我在阿里上选了新加坡,结果构建不成功。而且阿里只有一次选择地理位置的机会,所以,没有办法才切换到腾讯云。
然后,新建一个仓库
点击仓库名,选择镜像构建,点击“新建镜像构建规则”,选择GitHub,填写GitHub代码仓库,选择分支,填写版本规则(名字自己取),后面的分支标签,更新时间,commit号打上√
点击立即构建
指定分支
等待构建完成。需要很长时间,耐心等待。
镜像构建成功后如上图所示。
注意:
1. 上面的日志有一部分是边做边截图的,不一定完善,只作为参考。
2. 经过我的验证,autoware官网的docker还是无法拉取,以上拉取成功的是从docker官网拉取的。
3. docker官网并没有官方autoware镜像,因此,只能拉取其它作者建立的修改后的镜像;
autoware的检索结果
最终拉取的dock镜像
上面的dock镜像的官网:
Running Multiple Autoware-Powered Vehicles in Carla using Zenoh - Autoware
这个镜像应该是比官网的镜像更加符合研究者的需求,集合了autoware和模拟器carla,并且可以是多车控制的。
2.4 拉取镜像
从腾讯云拉取,参考仓库的快捷指令即可。
本文档最终还是没有从腾讯云拉取镜像,而是直接通过科学**上网,从docker官网拉取了相应的镜像,如下图所示。
代码如下:
docker pull 2256906828/zenoh_autoware:0.3.0
总结
由于网络原因,很难从外网拉取镜像,本文描述了,如何通过国内的云中转拉取镜像的方法。实际测试的效果是,autoware官方的镜像很难拉取,即使通过海外云也不行。所以,拉取autoware镜像的方法,还是从docker镜像官网,下载修改过的镜像。如果从docker官网下载,多重复几次拉取,基本都可以的,也无须使用云进行中转。虽然,通过云中转在本文中拉取autoware是不需要的,但是,也是一种docker拉取的方法,作为记录保留在本文档