文章

跟 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 进行授权

Webmentions

No webmentions were found.

如果您在自己的网站上提到了这篇文章,您可以通过 Webmention 通知我。您的网站需要支持 Webmention 协议。

或者,您也可以使用 Telegraph 手动发送 Webmention。