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   作者:月影工作室
IT运维支持-AIWALY-月影工作室