背景
近日在腾讯云服务器(Ubuntu 22.04)上部署开源项目new-api时,遇到了两个典型问题:
使用
git clone从 GitHub 拉取代码时,出现RPC failed: curl 56 Recv failure: Connection timed out错误,导致克隆中断。使用
docker-compose up -d启动服务时,Docker 无法拉取redis:latest等基础镜像,先后遇到i/o timeout、no such host、403 Forbidden、content size of zero以及 Docker 服务启动失败等一连串报错。
经过多次尝试,最终使用腾讯云官方镜像加速器https://mirror.ccs.tencentyun.com彻底解决了 Docker 拉取问题。本文将完整记录排查过程和解决方案,供遇到类似问题的开发者参考。
环境信息
云服务商:腾讯云(CVM)
操作系统:Ubuntu 22.04
Docker 版本:20.10 以上(使用系统包管理器安装)
目标项目:QuantumNous/new-api
第一部分:Git 克隆超时问题
现象
bash
sudo git clone https://github.com/QuantumNous/new-api.git Cloning into 'new-api'... remote: Enumerating objects: 51072, done. remote: Counting objects: 100% (155/155), done. remote: Compressing objects: 100% (93/93), done. error: RPC failed: curl 56 Recv failure: Connection timed out error: 1116 bytes of body are still expected fetch-pack: unexpected disconnect while reading sideband packet fatal: early EOF fatal: fetch-pack: invalid index-pack output
原因分析
仓库较大(超过 5 万个对象),国内直连 GitHub 网络不稳定,导致数据传输超时。
默认的 Git 缓冲区大小不足。
解决方案
方案一:浅克隆(推荐,快速有效)
bash
git clone --depth 1 https://github.com/QuantumNous/new-api.git
只拉取最近一次提交,大幅减少数据量。后续如需完整历史,可执行git fetch --unshallow。
方案二:增大 Git 缓冲区
bash
git config --global http.postBuffer 524288000 # 500MB git clone https://github.com/QuantumNous/new-api.git
方案三:使用 SSH 协议(需配置 SSH 密钥)
bash
git clone git@github.com:QuantumNous/new-api.git
最终采用浅克隆成功拉取代码。
第二部分:Docker 镜像拉取失败
现象演变
初次运行
sudo docker-compose up -d时,拉取 redis 镜像出现:text
ERROR: failed to resolve reference ...: dial tcp 31.13.67.41:443: i/o timeout
配置国内镜像加速器(如中科大、网易、百度云)后,出现:
no such host(域名无法解析)403 Forbidden(镜像源拒绝访问)content size of zero: invalid argument(返回空数据)
修改配置后,Docker 服务无法启动:
text
Active: failed (Result: exit-code) Start request repeated too quickly.
最终使用腾讯云官方镜像加速器才成功:
bash
sudo docker pull redis:latest # 拉取成功 sudo docker-compose up -d # 服务正常启动
逐步排查与解决过程
1. 配置国内通用镜像加速器(失败)
编辑/etc/docker/daemon.json:
json
{ "registry-mirrors": [ "https://docker.mirrors.ustc.edu.cn", "https://hub-mirror.c.163.com", "https://mirror.baidubce.com" ] }重启 Docker:sudo systemctl restart docker
遇到的问题:
mirror.baidubce.com域名无法解析 →no such host中科大、网易源偶尔超时或返回
403南京大学源 (
docker.nju.edu.cn) 返回403 Forbidden
2. 镜像源导致 Docker 服务启动失败
当daemon.json格式错误(例如多余逗号、引号不匹配)或镜像源地址无效时,Docker 服务会崩溃。
排查命令:
bash
sudo journalctl -u docker.service -n 50 --no-pager
解决方法:先恢复最小配置,确保 Docker 能启动。
bash
echo '{}' | sudo tee /etc/docker/daemon.json sudo systemctl restart docker3. 最终成功方案:使用腾讯云官方镜像加速器
对于腾讯云服务器,最优选择是使用腾讯云内网镜像加速器:
bash
sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://mirror.ccs.tencentyun.com"] } EOF sudo systemctl restart docker验证配置:
bash
sudo docker info | grep -A 5 "Registry Mirrors"
输出应包含你配置的地址。
拉取测试:
bash
sudo docker pull redis:latest sudo docker-compose up -d
所有镜像均成功拉取,服务正常启动。
为什么腾讯云镜像能成功?
腾讯云为同地域服务器提供了内网加速器,无需经过公网,速度快且稳定。
该镜像站由腾讯云官方维护,兼容性良好,不存在
403或no such host问题。
经验总结与建议
Git 克隆大型仓库
优先使用
--depth 1浅克隆。必要时增大
http.postBuffer。配置 SSH 密钥可提高稳定性。
Docker 镜像拉取
在云服务器上,优先使用云厂商提供的官方镜像加速器(如腾讯云
mirror.ccs.tencentyun.com、阿里云*.mirror.aliyuncs.com)。避免盲目填写网上搜来的公共镜像源,很多已失效或限流。
修改
daemon.json后务必检查 JSON 格式(可用cat -n或在线校验工具)。若 Docker 服务无法启动,先用
journalctl查看日志,恢复空配置再逐步添加。
网络问题排查流程
先确认能否 ping 通外网(
ping 8.8.8.8)。再检查 DNS 解析(
nslookup docker.io)。最后针对具体工具(git/docker)调整配置或使用代理。
结语
国内访问 GitHub 和 Docker Hub 时,网络问题时有发生。通过合理的浅克隆、配置云厂商镜像加速器,大多数问题都能解决。希望本文的记录能帮助到同样在腾讯云上部署服务的开发者。
相关命令速查表:
| 场景 | 命令 |
|---|---|
| 浅克隆 | git clone --depth 1 <repo_url> |
| Docker 配置镜像 | sudo tee /etc/docker/daemon.json <<<'...' |
| 重启 Docker | sudo systemctl restart docker |
| 查看 Docker 日志 | sudo journalctl -u docker -n 50 |
| 清理 Docker 缓存 | sudo docker system prune -a -f |
如果这篇文章对你有帮助,欢迎点赞、收藏、转发~