WSL解决Docker安装失败

在嵌入式Linux开发或服务器运维中,Docker是不可或缺的工具,但很多开发者在执行官方安装脚本时,会遇到SSL连接重置、端口拒绝访问、GPG公钥验证失败等一系列问题。本文以Ubuntu系统为例,分享从报错到成功安装Docker的完整实战流程,帮你避开所有坑。

一、问题背景

执行Docker官方一键安装脚本时,先后遇到两个核心错误:

  1. 访问Docker官方源 get.docker.com 报错:curl: (35) OpenSSL SSL_connect: Connection reset by peer
  2. 切换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

二、核心报错原因分析

  1. 境外源访问限制:Docker官方源和DaoCloud源均为境外或受限域名,443端口请求被网络策略拦截;
  2. GPG公钥缺失:添加阿里云Docker镜像源后,因缺少对应公钥,导致 apt 无法验证仓库合法性,提示 NO_PUBKEY 7EA0A9C3F273FCD8
  3. 软件源配置不匹配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

六、常见问题总结与避坑指南

  1. 优先选择国内镜像源:官方源和DaoCloud源易受网络限制,阿里云、清华源稳定性更高;
  2. 公钥缺失必处理NO_PUBKEY 错误会导致软件源无法使用,需通过 apt-key adv 命令导入;
  3. 更新索引是关键:添加软件源或导入公钥后,必须执行 sudo apt-get update 刷新缓存;
  4. 防火墙与安全组:云服务器需检查安全组是否放行443端口,本地防火墙无需额外配置(UFW默认关闭)。

七、总结

本文通过环境排查→清理旧配置→添加国内源→导入公钥→安装验证的完整流程,解决了Docker安装过程中的连接拒绝、公钥验证失败、无安装候选等问题。

posted @ 2025-12-26 10:52  M1nd3zz7z  阅读(0)  评论(0)    收藏  举报