在嵌入式Linux开发或服务器运维中,Docker是不可或缺的工具,但很多开发者在执行官方安装脚本时,会遇到SSL连接重置、端口拒绝访问、GPG公钥验证失败等一系列问题。本文以Ubuntu系统为例,分享从报错到成功安装Docker的完整实战流程,帮你避开所有坑。
一、问题背景
执行Docker官方一键安装脚本时,先后遇到两个核心错误:
- 访问Docker官方源
get.docker.com报错:curl: (35) OpenSSL SSL_connect: Connection reset by peer - 切换DaoCloud镜像源
get.daocloud.io报错:curl: (7) Failed to connect to get.daocloud.io port 443 after 70 ms: Connection refused
排查发现:本地UFW防火墙未启用,且 mirrors.aliyun.com 可正常访问,因此决定基于阿里云镜像源手动配置安装Docker。
二、核心报错原因分析
- 境外源访问限制:Docker官方源和DaoCloud源均为境外或受限域名,443端口请求被网络策略拦截;
- GPG公钥缺失:添加阿里云Docker镜像源后,因缺少对应公钥,导致
apt无法验证仓库合法性,提示NO_PUBKEY 7EA0A9C3F273FCD8; - 软件源配置不匹配:
apt-key命令已弃用,密钥存放路径与软件源配置的signed-by参数不匹配,导致安装包无候选。
三、分步解决流程(可直接复制执行)
步骤1:环境排查,确认网络可达性
首先验证国内镜像源的连通性,排除本地防火墙干扰:
# 查看UFW防火墙状态(若为inactive则无需处理)
sudo ufw status# 测试阿里云镜像源443端口连通性
nc -zv mirrors.aliyun.com 443
# 成功提示:Connection to mirrors.aliyun.com port 443 [tcp/https] succeeded!
步骤2:清理旧配置,重新添加阿里云Docker镜像源
删除之前无效的软件源配置,避免残留干扰:
# 删除旧的Docker软件源配置
sudo rm -f /etc/apt/sources.list.d/docker.list# 添加阿里云Docker镜像源(自动适配系统架构和Ubuntu版本)
echo "deb [arch=$(dpkg --print-architecture)] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
步骤3:导入GPG公钥,解决签名验证问题
针对 NO_PUBKEY 错误,直接从Ubuntu密钥服务器导入对应公钥:
# 导入Docker镜像源所需公钥
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 7EA0A9C3F273FCD8# (可选)按新规范存放密钥,消除apt-key弃用警告
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/docker.gpg
步骤4:更新包索引,安装Docker全套组件
必须先更新索引,否则 apt 无法识别新添加的软件源中的安装包:
# 刷新apt包管理器缓存
sudo apt-get update# 安装Docker核心组件及插件
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
步骤5:启动Docker服务,设置开机自启
安装完成后,启动服务并配置开机自启,避免服务器重启后Docker失效:
# 启动Docker服务
sudo systemctl start docker# 设置开机自启
sudo systemctl enable docker
四、验证安装结果
执行以下命令,确认Docker功能正常:
# 查看Docker版本
docker --version# 运行hello-world测试容器
sudo docker run hello-world
若输出 Hello from Docker! 相关提示,说明安装成功。
五、后续优化配置(提升使用体验)
1. 配置Docker镜像加速器
拉取镜像时,国内加速器可大幅提升速度,推荐使用阿里云专属加速器(需在阿里云控制台获取):
# 创建Docker配置目录
sudo mkdir -p /etc/docker# 编辑daemon.json配置文件
sudo vim /etc/docker/daemon.json# 添加以下内容(替换为你的专属加速器地址)
{"registry-mirrors": ["https://xxxx.mirror.aliyuncs.com","https://docker.mirrors.ustc.edu.cn","https://hub-mirror.c.163.com"]
}# 重启Docker使配置生效
sudo systemctl daemon-reload
sudo systemctl restart docker
2. 免sudo使用Docker
每次执行 docker 命令都加 sudo 过于繁琐,将当前用户加入 docker 组即可:
# 将当前用户加入docker组
sudo usermod -aG docker $USER# 重新登录服务器使配置生效
logout
六、常见问题总结与避坑指南
- 优先选择国内镜像源:官方源和DaoCloud源易受网络限制,阿里云、清华源稳定性更高;
- 公钥缺失必处理:
NO_PUBKEY错误会导致软件源无法使用,需通过apt-key adv命令导入; - 更新索引是关键:添加软件源或导入公钥后,必须执行
sudo apt-get update刷新缓存; - 防火墙与安全组:云服务器需检查安全组是否放行443端口,本地防火墙无需额外配置(UFW默认关闭)。
七、总结
本文通过环境排查→清理旧配置→添加国内源→导入公钥→安装验证的完整流程,解决了Docker安装过程中的连接拒绝、公钥验证失败、无安装候选等问题。