文章

跟 Docker Hub 连接超时说拜拜!用 Docxy 自建专属镜像加速器

跟 Docker Hub 连接超时说拜拜!用 Docxy 自建专属镜像加速器

在国内搞开发,docker pull 是不是经常让你等到天荒地老,甚至最后只等到一个红色的 timeout?我相信,这个场景你一定不陌生。由于网络环境的特殊原因,直接连接 Docker Hub 拉取镜像就像一场充满未知的冒险。很多曾经遍地开花的镜像加速服务,如今也一个个倒下,让本不富裕的开发环境雪上加霜。

但是,办法总比困难多!今天,我就带大家认识一个新朋友——Docxy,一个轻量级的 Docker 镜像代理服务。通过它,我们可以轻松搭建一个完全属于自己的镜像加速器,彻底告别龟速下载和连接失败的烦恼。

为什么是 Docxy?它香在哪?

我知道,你可能会想:“网上不是有别的法子吗?” 比如用 Cloudflare Worker 或者 Nginx 手动搭一个。确实有,但它们或多或少都有些“坑”:

  • Cloudflare Worker:有被 Cloudflare 封号的风险,用起来心惊胆战。
  • Nginx 代理:大多数方案只代理了镜像数据(registry-1.docker.io),但认证服务(auth.docker.io)还是直连。一旦认证服务被干扰,整个代理就瘫了。

而 Docxy 呢?它就是为了解决这些痛点而生的:

  • 部署灵活:既可以一键安装、独立运行(小白推荐);也能无缝集成到你现有的 Nginx 后面,由 Nginx 统一处理证书和流量转发(高玩首选),不占用额外端口,不干扰现有服务。
  • 原汁原味:完整实现了 Docker Registry V2 API 的代理,包括认证流程,确保了 100% 的兼容性,用起来跟官方源没任何区别。
  • 快就一个字:基于 Rust 编写,性能杠杠的。采用流式数据处理,拉取几 GB 的大镜像也毫不费力。
  • 安全感满满:独立运行时,内置 TLS 加密,自动帮你搞定 HTTPS,数据传输安全又可靠。

准备动手:三分钟拥有你的专属加速器

废话不多说,咱们直接上手!在开始之前,你需要准备两样东西:

  1. 一台有公网 IP 的国外服务器。
  2. 一个域名,并提前解析到你的服务器 IP。

准备就绪后,登录你的服务器,直接在命令行里运行下面这行神仙代码:

1
bash <(curl -Ls https://raw.githubusercontent.com/harrisonwang/docxy/main/install.sh)

接下来,安装脚本会像一个贴心的向导,引导你完成所有操作。你会面临两种选择:

方案一:独立部署模式(小白推荐)

如果你对 Nginx 不熟悉,或者这台服务器就是专门用来做镜像代理的,那么这个模式最适合你。

在脚本提问“是否通过Nginx等反向代理访问?”时,输入 n

脚本会自动帮你:

  1. 申请免费的 SSL 证书
  2. 下载并安装 Docxy 主程序。
  3. 配置并启动 systemd 服务,让 Docxy 直接监听 80 和 443 端口对外提供服务。

整个过程全自动,你几乎只需要输入你的域名,然后喝杯茶等着就行了。

方案二:Nginx 反向代理模式(高玩首选)

如果你已经部署了 Nginx,并且希望用它来统一管理网站和证书,这个模式是你的不二之选。

在脚本提问“是否通过Nginx等反向代理访问?”时,输入 y

脚本会:

  1. 让你确认 Docxy 在本地监听的端口(默认为 9000)。
  2. 询问你证书的路径,用于生成 Nginx 配置文件。
  3. 只启动 Docxy 的 HTTP 服务,并监听在本地端口上。
  4. 生成一份推荐的 Nginx 配置文件,你只需要把它 include 到你的主配置中,或者直接复制内容即可。

这样一来,Docxy 就乖乖地躲在 Nginx 身后,由 Nginx 负责处理所有外部流量和 HTTPS 加密,完美融入你现有的技术栈。

最后一步:让 Docker 认识新朋友

无论你选择哪种部署方式,最后一步都是相同的:让你的 Docker 老铁 认识咱们这个新代理。

在你需要使用加速的机器上(可以是你的开发机,也可以是其他服务器),编辑 Docker 的配置文件。在 Linux 上,它通常是 /etc/docker/daemon.json。如果这个文件不存在,就新建一个。

打开它,写入以下内容:

1
2
3
{
  "registry-mirrors": ["https://你的域名"]
}

记得把 你的域名 换成你自己的域名。保存文件,然后重启一下 Docker 服务:

1
sudo systemctl restart docker

好了,大功告成!现在试试 docker pull alpine,是不是感觉像坐上了火箭?

进阶玩法:解锁更高的拉取额度

众所周知,Docker Hub 对匿名用户的拉取次数是有限制的(每小时 10 次)。如果你拉取镜像比较频繁,这个额度可能不太够用。

别担心,Docxy 同样支持登录认证,让你能用上个人账户的更高额度(每小时 100 次)。

操作稍微“骚”一点,但很简单:

  1. 首先,用你的 Docker Hub 账号登录你的代理:
    1
    
    docker login 你的域名
    
  2. 登录成功后,打开 ~/.docker/config.json 文件(Windows 用户在 %USERPROFILE%\.docker\config.json)。你会看到类似下面的内容:

    1
    2
    3
    4
    5
    6
    7
    
    {
    	"auths": {
    		"你的域名": {
    			"auth": "一长串Base64编码的字符串"
    		}
    	}
    }
    
  3. 接下来是关键一步,我们来“骗”一下 Docker。复制一份认证信息,加给 Docker Hub 官方:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    {
    	"auths": {
    		"你的域名": {
    			"auth": "一长串Base64编码的字符串"
    -		}
    +		},
    +		"https://index.docker.io/v1/": {
    +			"auth": "把上面那串Base64字符串原封不动复制到这里"
    +		}
    +	}
    }
    

保存文件,搞定!现在你所有的 docker pull 都会以登录用户的身份去请求,额度大大增加。

写在最后

好了,教程到这里就差不多结束了。Docxy 这个小巧而精悍的工具,希望能成为你开发工具箱里的新宠,为你扫清障碍,让开发流程更加顺滑。

如果你觉得这个项目对你有帮助,不妨去它的 GitHub 仓库 点个 Star 支持一下作者吧!

祝大家编码愉快,再也没有 pull 不下来的镜像!

本文由作者按照 CC BY 4.0 进行授权