国内 Docker 无法拉取镜像?3 分钟教你用自己的域名自建加速通道(Linux 全攻略)

针对 2026 年国内 Docker Hub 镜像站大面积失效的问题,本文详细介绍如何利用 Cloudflare Workers 和自有域名,零成本搭建稳定、私有的 Docker 镜像加速代理。支持 Linux 服务器一键配置,彻底解决 docker pull 报错及连接超时问题。“本教程不仅适用于 Linux 服务器,同样解决 群晖 (Synology)宝塔面板 用户在拉取镜像时遇到的报错问题。”

准备工作

  1. Cloudflare 账号:免费版即可。

  2. 自定义域名:需托管在 Cloudflare(例如 docker.yourdomain.com)。

  3. Linux 服务器:需要拉取镜像的目标机器。


第一步:部署 Cloudflare Worker

  1. 登录 Cloudflare 控制台

  2. 点击左侧菜单栏的 Workers & Pages(Workers 和页面) -> Create application(创建应用程序) -> Create Worker(创建 Worker)。

  3. 给你的 Worker 起个名字(如 docker-proxy),点击 Deploy(部署)

  4. 点击 Edit Code(编辑代码),将默认代码全部清空,替换为以下优化后的代码:

JavaScript
// 代理配置:支持 Docker Hub, Quay.io, gcr.io 等
const hub_host = 'registry-1.docker.io'
const auth_url = 'https://auth.docker.io'
const workers_url = 'https://docker.yourdomain.com' // 替换成你自己的域名

export default {
  async fetch(request, env, ctx) {
    const url = new URL(request.url);
    const path = url.pathname;
    const host = url.hostname;

    // 处理 Docker 认证请求
    if (path.includes('/v2/auth')) {
      const newUrl = new URL(auth_url + path + url.search);
      const newRequest = new Request(newUrl, request);
      return fetch(newRequest);
    }

    // 转发拉取镜像请求
    const newUrl = new URL(`https://${hub_host}${path}${url.search}`);
    const newRequest = new Request(newUrl, {
      method: request.method,
      headers: request.headers,
      redirect: 'follow'
    });

    return fetch(newRequest);
  }
};
  1. 点击 Save and Deploy(保存并部署)


第二步:绑定自定义域名(关键步骤)

由于 *.workers.dev 域名在中国大陆被封锁,必须绑定你自己的域名。

  1. 在刚才的 Worker 详情页中,点击 Settings(设置) -> Domains & Routes(域和路由)。

  2. 点击 Add Custom Domain(添加自定义域名

  3. 输入你准备好的二级域名(如 docker.yourdomain.com),点击确认。等待几分钟解析生效。


第三步:在 Linux 服务器上配置 Docker

登录你的 Linux 服务器,修改 Docker 配置文件:

1. 修改 daemon.json

Bash
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://docker.yourdomain.com"]
}
EOF

请将 docker.yourdomain.com 替换为你实际绑定的域名。

2. 重启 Docker 服务

Bash
sudo systemctl daemon-reload
sudo systemctl restart docker

第四步:验证是否成功

运行以下命令测试拉取:

Bash
docker pull nginx:latest

如果能够看到下载进度条,说明你的私有镜像加速站已经完美运行!


常见问题与进阶优化

Q1:为什么拉取大镜像时会断开?

A:Cloudflare Workers 免费版有请求时间限制。如果镜像层(Layer)特别大且服务器带宽慢,可能会超时。

  • 解决方法:多次尝试,Docker 支持断点续传;或者升级为付费版($5/月)。

Q2:如何支持私有镜像库?

A:本教程主要针对公共镜像。若要拉取私有镜像,建议在代码中加入认证头处理,但为了安全起见,站长建议自建代理仅限个人或内部使用,不要公开 URL。

Q3:DNS 污染怎么办?

A:如果在某些地区仍然无法解析你的域名,可以在 /etc/hosts 中手动添加一条记录,将你的域名指向 Cloudflare 的任一 优选 IP


站长笔记: 在这个技术环境多变的时代,自建工具是每个管理员的必修课。本方案不仅解决了 Docker 拉取问题,其原理同样适用于 NPM、PyPI 等镜像的反向代理。

THE END