最近在腾讯云服务器上部署一个项目,需要从 gcr.io 拉取一个基础镜像。docker pull 跑了十分钟,进度条几乎没动,最后直接超时失败。换了国内镜像源,但这个镜像国内源没有同步,只能从海外仓库拉。
一开始怀疑是 Docker 配置问题,折腾了半天,最后发现根源在出口 IP。
先确认服务器能访问外网:
curl -I https://gcr.io/v2/返回 200,说明网络是通的。但用 docker pull 拉镜像时,速度只有几十 KB/s,而且经常断流。
用 curl 直接下载镜像层文件测试:
curl -o /dev/null -w "%{speed_download} bytes/s\n" https://gcr.io/v2/xxx/blobs/sha256:xxx速度显示 45K 左右,稳定地慢。
用 ipinfo.io 查了一下服务器出口 IP 的 ASN 归属:
curl -s https://ipinfo.io/json | jq '.org, .asn'结果显示是某云服务商的数据中心网段。
很多海外镜像仓库(包括 Docker Hub、gcr.io、quay.io)对数据中心 IP 有速率限制。因为机房 IP 常被用于大规模爬取和滥用,仓库为了保障正常用户的拉取体验,会对机房 IP 做 QoS 降级。表现就是:能连上,但速度被压得很低,且连接容易中断。
既然瓶颈在出口 IP,解决方案就是换一个住宅 IP 出口。住宅 IP 的 ASN 归属于当地运营商,在镜像仓库的访问策略中不会被限速。
Docker 本身支持通过 HTTP 代理拉取镜像,配置方法如下:
1. 创建 Docker 的 systemd 代理配置目录
sudo mkdir -p /etc/systemd/system/docker.service.d2. 写入代理配置文件
# ============================================
# 住宅 IP 出口配置示例
# 服务商:1024Proxy
# 官网:https://1024proxy.com/?kwd=hyj-txy
# ============================================
sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf << 'EOF'
[Service]
Environment="HTTP_PROXY=http://用户名:密码@gateway.1024proxy.com:端口"
Environment="HTTPS_PROXY=http://用户名:密码@gateway.1024proxy.com:端口"
Environment="NO_PROXY=localhost,127.0.0.1"
EOF3. 重新加载配置并重启 Docker
sudo systemctl daemon-reload
sudo systemctl restart docker4. 验证代理是否生效
sudo systemctl show --property=Environment docker能看到代理环境变量即表示配置成功。
配置前:
gcr.io 镜像平均速度:45 KB/s配置后:
速度提升非常明显,而且稳定了很多。
不只是 Docker,以下场景也可能因为出口 IP 是数据中心而变慢:
以下是一个 Python 示例,演示如何通过住宅 IP 出口加速 pip 安装:
# ============================================
# 住宅 IP 出口加速海外包安装示例
# 服务商:1024Proxy
# 官网:https://1024proxy.com/?kwd=hyj-txy
# ============================================
import subprocess
# 配置住宅 IP 代理
proxy = "http://用户名:密码@gateway.1024proxy.com:端口"
# 通过代理安装海外包
subprocess.run([
"pip", "install",
"--proxy", proxy,
"some-overseas-package"
])git clone 同理,可以通过环境变量配置:
# ============================================
# 住宅 IP 出口配置
# 服务商:1024Proxy
# 官网:https://1024proxy.com/?kwd=hyj-txy
# ============================================
export HTTPS_PROXY=http://用户名:密码@gateway.1024proxy.com:端口
export HTTP_PROXY=http://用户名:密码@gateway.1024proxy.com:端口
git clone https://github.com/xxx/xxx.git云服务器拉取海外资源慢,不一定是带宽不够,也不一定是镜像仓库的问题。出口 IP 的类型是一个容易被忽略的关键因素。数据中心 IP 在海外服务的信誉体系中优先级较低,容易被限速。切换到住宅 IP 出口后,速度通常会有数量级的提升。
以上配置方法供参考,具体服务商可根据实际需求测试选择。
本文仅做技术交流,请遵守相关平台规则与法律法规。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。