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

准备工作
-
Cloudflare 账号:免费版即可。
-
自定义域名:需托管在 Cloudflare(例如
docker.yourdomain.com)。 -
Linux 服务器:需要拉取镜像的目标机器。
第一步:部署 Cloudflare Worker
-
登录 Cloudflare 控制台。
-
点击左侧菜单栏的 Workers & Pages(Workers 和页面) -> Create application(创建应用程序) -> Create Worker(创建 Worker)。
-
给你的 Worker 起个名字(如
docker-proxy),点击 Deploy(部署)。 -
点击 Edit Code(编辑代码),将默认代码全部清空,替换为以下优化后的代码:
// 代理配置:支持 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);
}
};
-
点击 Save and Deploy(保存并部署)。
第二步:绑定自定义域名(关键步骤)
由于 *.workers.dev 域名在中国大陆被封锁,必须绑定你自己的域名。
-
在刚才的 Worker 详情页中,点击 Settings(设置) -> Domains & Routes(域和路由)。
-
点击 Add Custom Domain(添加自定义域名)。
-
输入你准备好的二级域名(如
docker.yourdomain.com),点击确认。等待几分钟解析生效。
第三步:在 Linux 服务器上配置 Docker
登录你的 Linux 服务器,修改 Docker 配置文件:
1. 修改 daemon.json
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://docker.yourdomain.com"]
}
EOF
请将 docker.yourdomain.com 替换为你实际绑定的域名。
2. 重启 Docker 服务
sudo systemctl daemon-reload
sudo systemctl restart docker
第四步:验证是否成功
运行以下命令测试拉取:
docker pull nginx:latest
如果能够看到下载进度条,说明你的私有镜像加速站已经完美运行!
常见问题与进阶优化
Q1:为什么拉取大镜像时会断开?
A:Cloudflare Workers 免费版有请求时间限制。如果镜像层(Layer)特别大且服务器带宽慢,可能会超时。
-
解决方法:多次尝试,Docker 支持断点续传;或者升级为付费版($5/月)。
Q2:如何支持私有镜像库?
A:本教程主要针对公共镜像。若要拉取私有镜像,建议在代码中加入认证头处理,但为了安全起见,站长建议自建代理仅限个人或内部使用,不要公开 URL。
Q3:DNS 污染怎么办?
A:如果在某些地区仍然无法解析你的域名,可以在 /etc/hosts 中手动添加一条记录,将你的域名指向 Cloudflare 的任一 优选 IP。
站长笔记: 在这个技术环境多变的时代,自建工具是每个管理员的必修课。本方案不仅解决了 Docker 拉取问题,其原理同样适用于 NPM、PyPI 等镜像的反向代理。
版权问题:https://docs.qq.com/form/page/DUUlkWW10TW9sT0x1