Docker原生不支持--retry参数,需通过脚本重试+镜像源优化+守护进程超时调大三者结合解决;推荐使用含5次重试的pull-with-retry.sh脚本,并配置多个国内镜像源及daemon.json中max-download-attempts等参数。

写个简单重试脚本(推荐首选)
零依赖、易修改、可集成进 CI/CD 或本地开发流程:
- 新建文件如
pull-with-retry.sh,内容如下:
#!/bin/bash
MAX_RETRIES=5
RETRY_DELAY=5
IMAGE="${1:-nginx:alpine}"
for i in $(seq 1 $MAX_RETRIES); do
echo "? 第 $i 次尝试拉取 $IMAGE"
if docker pull "$IMAGE"; then
echo "✅ 成功"
exit 0
else
echo "❌ 失败,$RETRY_DELAY 秒后重试..."
sleep $RETRY_DELAY
fi
done
echo "? 已重试 $MAX_RETRIES 次,全部失败"
exit 1
- 赋予执行权限:
chmod +x pull-with-retry.sh - 运行:
./pull-with-retry.sh redis:7.2 - 注意:单次 pull 超时仍由底层 HTTP 客户端决定(通常 30–60 秒),脚本只管“失败后要不要再试”,不改单次等待时长
配多个国内镜像源(大幅降低失败率)
重试只是兜底,源头提速才是关键。2026 年实测稳定可用的公共镜像源(建议组合配置):
-
毫秒镜像:
https://docker.1ms.run(免费、企业级保障,宝塔等已内置) -
轩辕镜像:
https://docker.xuanyuan.me(无需注册,全平台支持) -
DaoCloud:
https://docker.m.daocloud.io(老牌,作备用)
编辑 /etc/docker/daemon.json(Linux)或 Docker Desktop → Settings → Docker Engine(macOS/Windows),填入:
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me",
"https://docker.m.daocloud.io"
]
}
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
保存后点击 Apply & Restart,让配置生效。
调大守护进程 HTTP 超时(应对瞬时抖动)
虽然不能设“重试次数”,但延长单次请求等待时间,能避免因短暂卡顿就被判失败:
- 在
daemon.json中加入以下字段(与registry-mirrors同级):
"max-concurrent-downloads": 10,
"max-download-attempts": 5,
"experimental": true
-
max-download-attempts是 Docker 24.0+ 支持的实验性参数,表示单次 pull 内部重试次数(非脚本层面) -
max-concurrent-downloads提高并发数,加快整体拉取节奏 - 改完务必重启 Docker 服务
检查代理和 DNS(排除基础干扰)
很多“重试无效”的问题其实卡在更底层:
- 确认没误配代理:
env | grep -i proxy,如有且不需要,临时清空:unset HTTP_PROXY HTTPS_PROXY - DNS 解析失败也会表现为超时,可临时换为公共 DNS:
Linux 编辑/etc/resolv.conf,加两行:nameserver 8.8.8.8nameserver 1.1.1.1 - 验证是否通 registry:
curl -v https://registry-1.docker.io/v2/,返回 401 表示通;超时或拒绝则需查网络策略

















