参考国内镜像状态 2024年7月2日:
| 镜像加速器 | 镜像加速器地址 | 专属加速器? | 其它加速? |
|---|---|---|---|
https://registry.docker-cn.com | |||
| DaoCloud 镜像站 | https://docker.m.daocloud.io | 白名单模式 | |
| Azure 中国镜像 | https://dockerhub.azk8s.cn | 仅供内部访问 | Docker Hub、GCR、Quay |
| 科大镜像站 | https://docker.mirrors.ustc.edu.cn | 仅供内部访问 | |
| 阿里云 | https://<your_code>.mirror.aliyuncs.com | 需登录,系统分配 | |
https://reg-mirror.qiniu.com | |||
https://hub-mirror.c.163.com | |||
| 腾讯云 | https://mirror.ccs.tencentyun.com | 仅供内部访问 | |
| Docker 镜像代理 | https://dockerproxy.com | Docker Hub、GCR、K8S、GHCR | |
| 百度云 | https://mirror.baidubce.com | ||
| 南京大学镜像站 | https://docker.nju.edu.cn | ||
https://docker.mirrors.sjtug.sjtu.edu.cn | |||
| 中科院软件所镜像站 | https://mirror.iscas.ac.cn |
1. 南大是个好选择
南大除了docker hub 下不来,其他的仓库如github的仓库gcr可以下,参考1,官网
2. 自建镜像
参考 https://github.com/DaoCloud/crproxy/tree/master/examples/simple
version: '3'
services:
crproxy:
image: ghcr.io/daocloud/crproxy/crproxy:v0.12.1
container_name: crproxy
restart: unless-stopped
ports:
- 80:8080
- 443:8080
command: |
--acme-cache-dir=/tmp/acme
--acme-hosts=*
--default-registry=docker.io
tmpfs:
- /tmp/acme
# 非必须, 如果这台服务器无法畅通的达到你要的镜像仓库可以尝试配置
environment:
- https_proxy=http://proxy:8080
- http_proxy=http://proxy:8080由于docker被封(registry-1.docker.io/v2 被封,git pull的时候会先访问此注册表),即便配置了/etc/docker/daemon.json为自定义镜像,也无法正常拉取镜像,所以只能在镜像前指定域名拉取:
如果上述服务部署的域名是: m.daocloud.io/,则这样pull:
docker pull m.daocloud.io/docker.io/library/busybox
3. cloudflare 自建worker代理docker hub (2024年9月25日实测已无法使用)
- 注意,
import HTML from './docker.html'这个写法貌似不再支持,直接复制字符串塞进去就行。
//woker.js
import HTML from './docker.html';
export default {
async fetch(request) {
const url = new URL(request.url);
const path = url.pathname;
const originalHost = request.headers.get("host");
const registryHost = "registry-1.docker.io";
if (path.startsWith("/v2/")) {
const headers = new Headers(request.headers);
headers.set("host", registryHost);
const registryUrl = `https://${registryHost}${path}`;
const registryRequest = new Request(registryUrl, {
method: request.method,
headers: headers,
body: request.body,
// redirect: "manual",
redirect: "follow",
});
const registryResponse = await fetch(registryRequest);
console.log(registryResponse.status);
const responseHeaders = new Headers(registryResponse.headers);
responseHeaders.set("access-control-allow-origin", originalHost);
responseHeaders.set("access-control-allow-headers", "Authorization");
return new Response(registryResponse.body, {
status: registryResponse.status,
statusText: registryResponse.statusText,
headers: responseHeaders,
});
} else {
return new Response(HTML.replace(/{{host}}/g, originalHost), {
status: 200,
headers: {
"content-type": "text/html"
}
});
}
}
}- 记得添加自定义域名,默认分配的worker的域名被gfw封了
3. 组合拳
编辑/etc/docker/daemon.json
{
"registry-mirrors": ["https://你的自建镜像域名","https://gcr.nju.edu.cn"]
}重启docker即可
sudo systemctl daemon-reload
sudo systemctl restart docker