Ubuntu 系统 Docker 安装避坑指南

前言

针对安装过程中出现的 "无法连接 Docker 官方服务器""GPG 密钥文件冲突""SSL 连接重置" 等问题,本方案全程使用国内阿里云镜像源,彻底避开官方服务器访问瓶颈,同时提供分步操作说明与错误处理机制,确保新手也能顺利完成安装。

一、准备工作

1. 系统要求

  • 支持版本:Ubuntu 20.04 LTS / Ubuntu 22.04 LTS(64位,推荐官方 LTS 版本以保证稳定性)
  • 权限要求:拥有 sudo 权限(普通用户需确保能执行管理员命令)
  • 网络要求:能访问互联网(国内网络环境即可,无需科学上网)

2. 系统更新与旧版本卸载

若之前安装过 Docker 旧版本或残留文件,需先清理,避免冲突:

bash 复制代码
# 1. 更新系统包索引,确保依赖包为最新
sudo apt-get update && sudo apt-get upgrade -y

# 2. 卸载旧版 Docker 相关组件
sudo apt-get remove -y docker.io docker-ce docker-ce-cli containerd.io docker-compose-plugin

# 3. 删除 Docker 数据目录(避免残留配置干扰新安装)
sudo rm -rf /var/lib/docker /var/lib/containerd

二、核心安装步骤(全程国内镜像源)

1. 安装必要依赖包

Docker 安装需依赖证书、curl 等工具,先提前安装:

bash 复制代码
sudo apt-get install -y ca-certificates curl gnupg lsb-release apt-transport-https
  • ca-certificates:用于验证 HTTPS 仓库的证书
  • apt-transport-https:允许 apt 通过 HTTPS 协议下载软件包

2. 配置阿里云 Docker 镜像源(关键避坑步骤)

核心问题:直接访问 Docker 官方源(download.docker.com)易出现网络超时或连接重置,改用阿里云镜像源可大幅提升成功率。

bash 复制代码
# 1. 创建 GPG 密钥存储目录(若不存在则自动创建)
sudo mkdir -p /etc/apt/keyrings

# 2. 下载阿里云 Docker GPG 密钥(自动覆盖已存在的密钥文件,无需手动确认)
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor --yes -o /etc/apt/keyrings/docker.gpg

# 3. 添加阿里云 Docker 仓库到系统源列表
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 4. 设置密钥文件权限(确保 apt 能正常读取密钥)
sudo chmod a+r /etc/apt/keyrings/docker.gpg
  • --yes:自动覆盖已存在的 docker.gpg 文件,避免 "文件已存在" 的交互提示
  • $(dpkg --print-architecture):自动识别系统架构(如 amd64、arm64)
  • $(lsb_release -cs):自动识别 Ubuntu 版本代号(如 22.04 对应 jammy,20.04 对应 focal)

3. 安装 Docker 核心组件

bash 复制代码
# 1. 更新包索引(让系统识别新添加的阿里云 Docker 仓库)
sudo apt-get update

# 2. 安装 Docker 引擎、CLI、容器运行时及 Compose 插件
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

特殊情况处理:服务重启确认界面

若安装过程中弹出 "服务重启选择" 界面:

  • 无需手动勾选,系统默认已选中需重启的必要服务(如 containerd、网络服务等)
  • 按 Tab 键切换光标到 选项,再按 Enter 键确认即可
  • 作用:重启依赖服务以适配新安装的 Docker 组件,确保功能正常

三、权限配置(可选但推荐)

默认情况下,docker 命令需通过 sudo 执行(如 sudo docker run),将当前用户添加到 docker 用户组,可避免每次输入 sudo:

bash 复制代码
# 将当前用户添加到 docker 组
sudo usermod -aG docker $USER

# 提示:需注销当前用户并重新登录,权限设置才会生效
echo "权限配置完成!请注销当前会话并重新登录,即可直接使用 docker 命令(无需 sudo)"

四、验证安装(确认 Docker 正常工作)

安装完成后,通过以下命令验证是否成功:

1. 验证 Docker 版本

bash 复制代码
# 查看 Docker 引擎版本
docker --version
# 示例输出:Docker version 24.0.6, build ed223bc

# 查看 Docker Compose 版本(Compose 已集成到 Docker 插件中)
docker compose version
# 示例输出:Docker Compose version v2.20.3

2. 运行测试容器(核心验证步骤)

通过运行官方 hello-world 容器,确认 Docker 引擎能正常启动容器:

bash 复制代码
# 若已配置用户组权限,可去掉 sudo;未配置则需加 sudo
sudo docker run --rm hello-world

成功标志:

终端输出以下内容,说明 Docker 安装成功且能正常拉取镜像、运行容器:

plaintext 复制代码
Hello from Docker!
This message shows that your installation appears to be working correctly.
...(后续为 Docker 工作原理说明,可忽略)

五、常见问题处理(针对安装失败的补救措施)

1. 问题:执行 apt-get update 时仍提示 "网络连接失败"

原因:DNS 配置异常,无法解析阿里云镜像源域名。解决方法:手动配置阿里云 DNS:

bash 复制代码
# 1. 添加阿里云 DNS 到系统配置
echo "nameserver 223.5.5.5" | sudo tee -a /etc/resolv.conf
echo "nameserver 223.6.6.6" | sudo tee -a /etc/resolv.conf

# 2. 重启网络服务使 DNS 配置生效
sudo systemctl restart systemd-resolved

# 3. 重新更新包索引
sudo apt-get update

2. 问题:需要安装特定版本的 Docker(如兼容旧项目)

解决方法:先列出可用版本,再指定版本安装:

bash 复制代码
# 1. 列出阿里云仓库中可用的 Docker 版本
apt-cache madison docker-ce

# 2. 安装指定版本(以 24.0.6 为例,需替换为实际需要的版本)
sudo apt-get install -y docker-ce=5:24.0.6-1~ubuntu.22.04~jammy docker-ce-cli=5:24.0.6-1~ubuntu.22.04~jammy containerd.io docker-compose-plugin

六、Docker 服务管理(日常运维常用命令)

操作需求 命令
启动 Docker 服务 sudo systemctl start docker
停止 Docker 服务 sudo systemctl stop docker
重启 Docker 服务 sudo systemctl restart docker
设置 Docker 开机自启 sudo systemctl enable docker
关闭 Docker 开机自启 sudo systemctl disable docker
查看 Docker 服务状态 sudo systemctl status docker

总结

本方案通过以下核心措施规避安装错误:

  • 全程阿里云镜像源:替代官方源,解决网络超时、连接重置问题
  • 自动覆盖密钥文件:用 --yes 参数跳过 "文件已存在" 的交互提示
  • 分步清理旧版本:避免残留配置与新版本冲突
  • 提供 DNS 补救方案:解决国内网络环境下的域名解析问题

按照此文档操作,可在 Ubuntu 系统中稳定完成 Docker 及 Docker Compose 的安装,适用于开发、测试及生产环境。

相关推荐
JNU freshman3 分钟前
vue 技巧与易错
前端·javascript·vue.js
落一落,掉一掉10 分钟前
第十二周 waf绕过和前端加密绕过
前端
Asort11 分钟前
JavaScript设计模式(十六)——迭代器模式:优雅遍历数据的艺术
前端·javascript·设计模式
Coffeeee19 分钟前
Labubu很难买?那是因为还没有用Compose来画一个
前端·kotlin·android jetpack
我是日安20 分钟前
从零到一打造 Vue3 响应式系统 Day 28 - shallowRef、shallowReactive
前端·javascript·vue.js
开源之眼22 分钟前
深入理解 JavaScript 报错:TypeError: undefined is not a function
前端·javascript
LRH22 分钟前
时间切片 + 双工作循环 + 优先级模型:React 的并发任务管理策略
前端·react.js
用户34216749055224 分钟前
Java高手速成--吃透源码+手写组件+定制开发教程
前端·深度学习
懒得不想起名字25 分钟前
flutter 集成高德地图,获取定位以及展示地图高德地图
前端
却尘26 分钟前
当你敲下 `pnpm run dev`,这台机器到底在背后干了什么?
前端·javascript·面试