无题
Docker 安装与疑难问题排查解决指南
本文档记录了一次完整的 Docker 安装、配置镜像加速以及解决一系列复杂配置不生效问题的过程,旨在为遇到类似“幽灵”问题的用户提供一份从入门到深度排查的完整指南。
一、 Docker 标准安装与配置(Ubuntu)
在 Ubuntu 系统上安装 Docker Engine 的标准步骤。
1. 准备工作
更新 apt
包索引并安装必要的依赖软件。
Bash
1 |
|
2. 添加 Docker 官方 GPG 密钥
为了确保下载的软件包是官方且未被篡改的,需要添加 Docker 的 GPG 密钥。
Bash
1 |
|
3. 添加 Docker 的软件仓库
告诉 apt
包管理器去哪里下载 Docker。
Bash
1 |
|
4. 安装 Docker 引擎
更新 apt
索引并安装 Docker。
Bash
1 |
|
二、 问题一:Docker 拉取镜像超时
在国内网络环境下,直接从官方 Docker Hub 拉取镜像经常会遇到超时问题。
初始错误
1 |
|
解决方案:配置国内镜像加速器
最有效的解决方法是使用国内云服务商提供的镜像加速服务,例如阿里云。
- 获取加速器地址 访问阿里云容器镜像服务控制台,在“镜像加速器”页面找到你的专属地址,格式为 https://<你的ID>.mirror.aliyuncs.com。
- 创建 Docker 配置文件 创建或修改 /etc/docker/daemon.json 文件,并写入你的加速器地址。 Bash
1
2
3
4
5
6sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://<你的ID>.mirror.aliyuncs.com"]
}
EOF - 重启 Docker 服务 Bash
1
2sudo systemctl daemon-reload
sudo systemctl restart docker
三、 问题二:镜像配置不生效的深度排查
这是一个复杂问题的排查过程,记录了当 daemon.json
的配置看似正确但并未生效时的解决思路。
核心症状
即使 daemon.json
配置正确且 Docker 服务已重启,docker info
命令的输出中 Registry Mirrors
字段依然为空,拉取镜像时仍然请求官方地址。
排查过程
- 确认配置文件和服务状态
cat /etc/docker/daemon.json
:确认文件内容和 JSON 格式无误。sudo systemctl status docker
:确认 Docker 服务处于active (running)
状态,且启动日志无明显错误。
- 寻找更高优先级的配置(失败的尝试)
ls -l /etc/systemd/system/docker.service.d/
:检查是否存在systemd
覆盖文件。初始排查时发现该目录不存在。
- 定位根本原因(关键发现)
ps aux | grep dockerd
:检查正在运行的 Docker 守护进程的实际启动参数。- 发现:启动命令为
/usr/bin/dockerd -H fd:// ...
,其中并没有包含--config-file /etc/docker/daemon.json
参数。 - 结论:当前系统的 Docker 服务在启动时,并未被配置为自动加载
/etc/docker/daemon.json
文件。
修复尝试:强制加载配置文件
通过创建 systemd
覆盖文件来修改 Docker 的启动命令。
Bash
1 |
|
结果:在本次排查中,即便是执行了上述修复,问题依然存在,这指向了更深层次的环境问题。
四、 最终解决方案:彻底重装 Docker
当所有常规和深度排查手段都失效时,说明 Docker 的安装环境可能已处于一种无法预知的“损坏”状态。最可靠的解决方案是彻底清理并重装。
- 彻底卸载 Docker Bash
1
sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
- 清理所有残留文件(非常重要) 警告:此操作会删除所有本地的 Docker 镜像、容器和数据卷。 Bash
1
2
3
4sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
sudo rm -rf /etc/docker
sudo rm -rf /etc/systemd/system/docker.service.d - 从一个纯净的状态重新安装 重复本文档 第一节 中的所有安装步骤。
- 在首次启动前配置镜像 在完成安装后、启动 Docker 服务之前,先创建好镜像配置文件。 Bash
1
2
3
4
5
6sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://<你的ID>.mirror.aliyuncs.com"]
}
EOF - 启动并验证 Bash 经过彻底重装,所有隐藏的配置冲突和状态问题都应被清除,镜像配置最终生效。
1
2
3sudo systemctl start docker
sudo systemctl enable docker
docker info | grep "Registry Mirrors"
五、 附录:解决 wget
SSL 连接失败问题
问题描述
在使用 wget
下载文件时,出现 无法建立 SSL 连接。
的错误。
根本原因
最常见的原因是客户端的系统时间不正确。SSL 证书有严格的有效期,如果系统时间与真实时间偏差过大(即使只是一天),就会导致证书验证失败。
解决方案
- 校准系统时间(首选) 使用 timedatectl 命令开启网络时间同步(NTP)。 Bash 然后使用
1
sudo timedatectl set-ntp true
date
命令验证时间是否已校准。 - 更新 CA 根证书(备选) 如果时间准确无误,可以尝试强制重装系统的 CA 证书包。 Bash
1
2sudo apt-get update
sudo apt-get install --reinstall ca-certificates
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Zangyzhi!