docker pull镜像 代理 (持续维护)
#docker pull镜像 代理 (持续维护)
#前提
docker pull nginx:latest
# 完整形式实际是: docker.io/library/nginx:latest
docker pull quay.io/prometheus/prometheus:latest
# 完整形式: quay.io/prometheus/prometheus:latest
docker pull ghcr.io/actions/runner:latest
# 完整形式: ghcr.io/actions/runner:latest
docker pull gcr.io/distroless/static:latest
# 完整形式: gcr.io/distroless/static:latest
1. docker.io 之所以特殊,是因为它是唯一被"省略前缀"的默认值。 你写 nginx 不写域名,Docker 引擎会自动脑补成 docker.io/library/nginx。而 quay.io/xxx、ghcr.io/xxx 这些,域名已经写死在字符串里了,Docker 引擎解析的时候直接按这个域名去请求,根本不会走 registry-mirrors 这个逻辑——因为 registry-mirrors 从设计上就只是给"默认省略的那个 docker.io"提供备用地址,不是给所有仓库通用的转发规则。
#为什么会这样设计
- 因为镜像名里的域名,本质上就是"这个镜像从哪里来"的身份标识,和后面跟着的仓库路径共同构成一个全局唯一的坐标。如果 Docker 引擎允许"把 quay.io 的请求偷偷转发到别的地方",会带来供应链安全风险——你以为拉的是 quay.io 官方的镜像,实际上可能被中间人换成了别的内容。所以 Docker Engine 只给
registry-mirrors开了这一个口子,且只针对默认仓库,其他仓库的替换必须是你主动、显式地改镜像名,这样出问题时责任边界很清楚。
registry-mirrors 的官方定位其实更接近"给 Docker Hub 配置一个 CDN 加速节点",而不是"通用镜像代理网关"。
#containerd 优势
**可以配置 per-registry mirror,不需要改镜像名。**Docker 引擎没有,containerd 有:
# /etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."ghcr.io"]
endpoint = ["https://ghcr.xiaomi318.com"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."quay.io"]
endpoint = ["https://quay.xiaomi318.com"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.k8s.io"]
endpoint = ["https://k8s.xiaomi318.com"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."mcr.microsoft.com"]
endpoint = ["https://mcr.xiaomi318.com"]
#方法1: 通过deno配置个ts 转发代理--推荐!!!个人够用
但是只是反代 . 有的没有auth百搭,eg: ghcr.io,适合单独拉某一个镜像
cat /etc/docker/daemon.json
注意是 registry-mirrors 带着s
{
"data-root": "xx你的docker目录,挂载硬盘位置",
"iptables": false,
"registry-mirrors":["httxxxxxxxr.deno.net"],
"bip": "172.17.0.1/16",
"exec-opts": ["native.cgroupdriver=systemd"]
}
containerd → 看 `/etc/containerd/config.toml`
#国内免费
上边不够后,可以换下面这种
#方法2: 经过github action 推送到阿里云自己仓库 [兜底方案,相当于自建仓库,很好]
https://github.com/qbmiller/docker_image_pusher
重命名下: docker tag docker.m.xxx.io/nginx/nginx:latest nginx/nginx:latest
或者直接 配置/etc/docker/daemon.json /etc/containerd/config.toml
#方法3: cloudfare worker . 不过提示有封号风险...自用不要紧
https://github.com/cmliu/CF-Workers-docker.io
#方法4: https://github.com/dqzboy/Docker-Proxy 【推荐】
自己有阿里云 腾讯与 服务器的话,可以搭建一个 docker proxy 。