GitHub 超时问题
curl 本身没有内置的自动重试机制,但通过组合参数,完全可以实现超时重试的效果。推荐以下两种方法:
🚀 方法一:使用 curl 的 --retry 参数(最推荐)
curl 提供了专门的重试参数,仅在发生临时性错误(如超时、连接重置等)时自动重试,非常智能。
curl --retry 5 --retry-delay 5 --retry-max-time 60 \
-L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" \
-o /usr/local/bin/docker-compose
| 参数 | 作用 |
|---|---|
--retry 5 |
最多重试 5 次 |
--retry-delay 5 |
每次重试间隔 5 秒 |
--retry-max-time 60 |
整个重试过程持续不超过 60 秒(含首次尝试) |
注意:
--retry只在遇到临时性错误(如超时、503 服务不可用等)时才生效。如果遇到 DNS 解析失败或连接被拒绝等致命错误,curl可能不会重试。
📦 方法二:使用 while 循环包装(强制无限重试)
如果你想让 curl 在任何失败情况下都不断重试,可以用 while 循环手动实现:
# 持续重试直到成功
until curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose; do
echo "下载失败,5秒后重试..."
sleep 5
done
或者配合 --connect-timeout 设置连接超时:
while ! curl --connect-timeout 30 \
-L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" \
-o /usr/local/bin/docker-compose; do
echo "下载失败,5秒后重试..."
sleep 5
done
| 参数 | 作用 |
|---|---|
--connect-timeout 30 |
连接超时设置为 30 秒 |
! |
取反,当 curl 返回非 0 时继续循环 |
这个方法的优点是可以手动控制重试次数和间隔,且对任何失败情况都会重试。
🎯 针对你的场景:推荐用法
结合你之前的 GitHub 超时问题,建议使用以下命令:
sudo curl --retry 10 --retry-delay 10 --connect-timeout 30 \
-L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" \
-o /usr/local/bin/docker-compose
如果 GitHub 持续超时,更建议切换国内镜像源:
sudo curl --retry 5 --retry-delay 5 \
-L "https://get.daocloud.io/docker/compose/releases/download/v2.24.0/docker-compose-$(uname -s)-$(uname -m)" \
-o /usr/local/bin/docker-compose
这样既享受了重试机制,又避免了 GitHub 的网络问题。😊
文档更新时间: 2026-08-07 08:12 作者:月影工作室