快速修复
# 一键:备份原配置 + 写入当前实测可用的加速器 + 重启 docker
sudo cp /etc/docker/daemon.json /etc/docker/daemon.json.bak-$(date +%Y%m%d) && sudo tee /etc/docker/daemon.json >/dev/null <<'EOF'
{
"registry-mirrors": [
"https://docker.1panel.live",
"https://docker.m.daocloud.io"
]
}
EOF
sudo service docker restart && docker pull hello-world
你会遇到什么
校园网/家宽(无代理)下 docker pull 报 ERROR: Get "https://registry-1.docker.io/v2/": ... connection reset by peer,或镜像拉不下来。你按网上老教程配加速器,结果更糟(no such host)——因为网上流传的加速器列表大部分已经死了,不能照抄。
本文路径:快速修复(30 秒一段命令)→ 一步步排查(可跳读)→ 原理与变体(症状/原因/证据)。赶时间直接跳到「快速修复」。
为什么会这样
Docker Hub 官方 registry(registry-1.docker.io)对国内网络没有稳定加速,直连经常被网络层断掉(connection reset / timeout 同族)。
而加速器是第三方服务,会死会换:2026-08-29 实测 9 个常见加速器,只有 1panel.live(200)、daocloud(401)、xuanyuan(401)、1ms(401)、rat.dev(302)可用,dockerproxy.cn / sjtug / dockerpull.org / ustc 全部已死(000)。
「网上旧列表」和「配置过时镜像站」是失败的第二大来源(DNS no such host)。
实测环境:校园网无代理,Docker 29.1.3,2026-08-29。
docker pull 的下载链路是「CLI → registry-1.docker.io → 各层 blob 的 CDN 重定向」:国内出口对 registry 主域名不稳定时,连接在传输层就被重置/超时,报错跟命令无关。
镜像加速器本质是「第三方代理 registry」:它的可用性取决于运营者,会死、会换域名、会限流——所以「网上旧列表 + 配置过时镜像站」是第二类失败源(DNS no such host)。
确定性推论:先分层——curl -I https://registry-1.docker.io/v2/ 判断直连;探活加速器时 401/302 不等于死(可能是需要认证的正常响应),000 或 DNS no such host 才是真死;
配置后必须 docker info 确认 Registry Mirrors 已生效,配完不验证等于没配。
一步步来
1. 确认失败形态 — 必做
connection reset by peer/i/o timeout直连 registry → 网络层被断;no such host/ DNS 解析失败 → 配置的加速器域名已死。
2. 写入实测可用的加速器 — 必做
sudo tee /etc/docker/daemon.json >/dev/null <<'EOF'
{
"registry-mirrors": [
"https://docker.1panel.live",
"https://docker.m.daocloud.io"
]
}
EOF
先备份原配置(上面快速修复命令已含备份)。加速器会变,配好后过段时间失效就再实测一轮(curl -o /dev/null -s -w '%{http_code}' https://镜像域名/v2/,401/200/302 算可用,000 算死)。
3. 重启并验证 — 必做
sudo service docker restart
docker pull hello-world
Download complete / Pull complete 即成功(实测:更新配置后 pull 成功,退出码 0)。
4. 拉取/解压阶段报错(docker ≥ 23.0) — 必做
有些镜像站能连但拉取解压失败,可启用 containerd 原生镜像存储:daemon.json 加 "features": { "containerd-snapshotter": true } 后重启(源自补充文章,本机未复现该分支,未实测)。
5. 长期/企业方案 — 必做
自建 registry、走 HTTP 代理拉取后离线导入;CI 用能访问 Hub 的海外构建机。
怎么确认修好了
docker pull hello-world && docker run --rm hello-world
能正常拉取并运行即成功。实测:直连 registry-1.docker.io:443 curl 12 秒 Connection timed out(exit 28);更新 daemon.json(1panel.live + daocloud)后 docker pull hello-world 成功。
其它环境的表现
| 环境 | 说明 |
|---|---|
| Docker Desktop (Windows) | 引擎配置在 ~/.docker/daemon.json(同 registry-mirrors 字段),或在 Docker Engine 设置里填 registry-mirrors(无需改 /etc/docker/daemon.json);改完 docker desktop stop 重启生效。2026-08-30 实测 4 个可用镜像(daocloud/1ms/1panel/xuanyuan)+ hello-world 拉取成功 |
| 校园网/家宽(无代理) | 直连必断,配实测可用的镜像加速器 |
| 公司内网 | 可能有内部 registry,优先问运维;否则同上 |
| VPN/代理环境下 | 走代理仍 pull 失败:daemon 不读 shell 的 http_proxy,代理要配在 systemd drop-in 或 Docker Desktop 的 proxy 设置里才生效;该分支本机未实测(moby#48406,机制核对,与无代理直连失败互补) |
| 老教程加速器 | dockerproxy.cn / sjtug / dockerpull.org / ustc 已死(实测 000),别照抄 |
症状
docker pull 失败的常见形态:
# 形态 1:直连 Docker Hub 被断(网络层)
Error response from daemon: Get "https://registry-1.docker.io/v2/": ... connection reset by peer
# 或:卡在 "Using default tag: latest" 无进度 / timeout
# 形态 2:配置的镜像加速器已死(DNS 层)
Error response from daemon: failed to resolve reference "docker.io/library/xxx:latest":
failed to do request: Head "https://<镜像站>/v2/...": dial tcp: lookup <镜像站> ...: no such host
同族但根因不同(别在本页死磕网络):
manifest for xxx not found/manifest unknown→ 镜像或标签不存在,见 docker-manifest-not-found;no space left on device(拉取/解压阶段)→ WSL 下常见真相是宿主盘满,见 wsl-no-space-left;- 拉一半断掉 / 反复 timeout:网络抖动,直接重跑
docker pull即可——已下载的层按 digest 复用、自动跳过,不用清缓存也不用 rmi。
原因
Docker Hub 官方 registry 对国内网络没有稳定加速,直连经常被网络层断掉;而第三方加速器会死会换,网上旧列表大部分已失效(2026-08-29 实测 9 个候选,仅 5 个可用)。
解法
- 备份
/etc/docker/daemon.json,写入当前实测可用的加速器(如 1panel.live / daocloud)。 sudo service docker restart,docker pull hello-world验证。- 拉取/解压阶段报错(docker ≥ 23.0):daemon.json 加
"features": { "containerd-snapshotter": true }(源自补充文章,未实测)。 - 长期/企业:自建 registry 或代理拉取后离线导入。
验证证据
- 本地实测(2026-08-29,校园网无代理,Docker 29.1.3):
- 直连
registry-1.docker.io:443:curl 12 秒Connection timed out(exit 28),与文章 connection reset by peer 同族(网络层被断); - 原 daemon.json 里配的旧加速器(中科大 ustc):
getent hostsDNSno such host——复现形态 2 的失败链(配置过时镜像站); - 9 个候选加速器连通性实测:1panel.live=200、daocloud=401、xuanyuan=401、1ms=401、rat.dev=302 可用;dockerproxy.cn / sjtug / dockerpull.org / ustc 全部 000 已死——证明「网上旧列表不可照抄」;
- 更新 daemon.json(1panel.live + daocloud)→
sudo service docker restart→docker pull hello-world成功(Download complete / Pull complete,退出码 0); - 原配置备份保留在
/etc/docker/daemon.json.bak-20260829。 - 实测复现日志(2026-08-29)
相关 canonical
按「前置 → 本页 → 同根 / 变体族」读:
- 前置(先排除):Docker daemon 连不上——daemon 没起时 pull 报的是连接错误,不是网络问题
- 同根(同一网络层根因,换源家族):
- GitHub 直连慢/失败(镜像/Release 资产下载被断)
- pip 安装超时/慢(国内换源家族)
- npm install 慢/挂起(国内换源家族)
- Go 模块拉取慢/超时(国内换源家族)
- ollama pull 卡住/超时(registry 直连不稳 → 换源)
- 容器内 DNS 解析失败(no such host 同为 DNS 层:宿主 daemon 侧 vs 容器内)
- 变体族(pull 失败的其他形态,根因不同):
- 镜像或标签不存在(manifest unknown / not found)
- WSL 报 No space left(pull 解压阶段 ENOSPC,WSL 宿主盘满)
适用工具 (1)
本问题方案已挂到下列工具的方案页——从工具页也能回到这里,双向可达。
docker · 外部工具来源与证据
← 编码代理与终端 问题域 | 问题货架 | 遇到其它问题?去 问题空间 提交求助卡