安装docker
# Docker引擎(守护进程)的安装必须在root权限下完成:
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
#服务启动与初始化:安装后需启动Docker服务:
sudo systemctl start docker # 启动服务
sudo systemctl enable docker # 设置开机自启
🐳 Docker 启动失败与拉取镜像超时问题解决记录
记录一次在 Ubuntu 环境中使用 Docker 时遇到的问题与解决过程,主要包括:
- Docker 服务启动失败
- 无法拉取镜像,连接 Docker Hub 超时
📌 问题一:Docker 服务启动失败
🔧 错误信息
sudo systemctl start docker
Job for docker.service failed because the control process exited with error code.
See "systemctl status docker.service" and "journalctl -xeu docker.service" for details.
sudo systemctl status docker -l
× docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; preset: enabled)
Active: failed (Result: exit-code)
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
...
✅ 解决方案:daemon.json 配置错误
查看日志:
sudo journalctl -xeu docker.service
没有给出明显原因,于是尝试手动启动 Docker:
sudo /usr/bin/dockerd -D
输出:
unable to configure the Docker daemon with file /etc/docker/daemon.json: invalid character '/' looking for beginning of value
问题定位:/etc/docker/daemon.json
文件格式错误,含有非法字符(如注释 //
等)。
✅ 修复方式:
重命名或删除配置文件:
sudo mv /etc/docker/daemon.json /etc/docker/daemon.json.bak
重新启动 Docker:
sudo systemctl restart docker
验证成功启动:
sudo systemctl status docker
📌 问题二:无法拉取 Docker 镜像
🔧 报错信息:
docker pull hello-world
Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded
说明 Docker 无法连接 Docker Hub。
🧭 网络测试:
curl -I https://registry-1.docker.io/v2/
结果:连接超时 → Docker Hub 被墙或 DNS 污染
✅ 解决方案:配置镜像加速器
编辑配置文件:
sudo mkdir -p /etc/docker
sudo nano /etc/docker/daemon.json
写入以下内容:
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://registry.docker-cn.com",
"https://hub-mirror.c.163.com"
],
"dns": ["8.8.8.8", "223.5.5.5"]
}
保存后,重启 Docker:
sudo systemctl daemon-reexec
sudo systemctl restart docker
再次拉取镜像测试:
docker pull hello-world
🧠 总结
问题 | 原因 | 解决方案 |
---|---|---|
Docker 启动失败 | daemon.json 格式错误 | 修复或移除配置文件 |
拉取镜像失败 | Docker Hub 被墙 / DNS 污染 | 配置国内镜像加速器 + DNS |
长期失败 | 网络封锁严重 | 使用代理或离线导入 |