Docker 配置
使用 SparkCR 镜像别名进行可认证的 Docker Hub 拉取,并了解 registry-mirrors 的认证限制。
Docker 配置
Docker 用户推荐直接使用 Docker Hub 镜像别名 docker.sparkcr.cn 作为镜像引用 host。这样 docker login 的凭据会用于 SparkCR 的认证交换,请求能够按登录用户使用配额和对应权益。
推荐:使用镜像别名
先使用 SparkCR 账号用户名和 Access Token 登录 Docker Hub 别名入口:
docker login docker.sparkcr.cn拉取 Docker Hub 官方镜像时保留 library/ 命名空间:
docker pull docker.sparkcr.cn/library/hello-world:latest
docker pull docker.sparkcr.cn/library/nginx:latest公共镜像加速使用 pull:public 权限即可。也可以使用路径前缀入口完成可认证拉取:
docker login sparkcr.cn
docker pull sparkcr.cn/docker.io/library/nginx:latestregistry-mirrors 的认证限制
Docker Engine 的 registry-mirrors 会透明代理 docker pull nginx 这类 Docker Hub 短镜像名,但该请求的逻辑 registry 仍然是 Docker Hub。即使已经执行:
docker login docker.sparkcr.cnDocker 在 transparent mirror 拉取时也不会可靠地把为 SparkCR mirror 保存的凭据带到 SparkCR 的 token 请求。SparkCR 收不到 Basic Auth 时只能签发匿名 token,因此会出现:
- 即使已经登录 SparkCR,短镜像名拉取仍会被视为匿名请求。
- 请求计入匿名 IP 配额,而不是登录用户配额。
- CI 或共享出口网络更容易触发匿名限流。
该行为可参阅 Moby 项目问题记录:Docker is not passing auth informations when pulling from a mirror registry (moby/moby#30880)。
因此,需要使用登录用户配额或账号权益时,不要依赖 registry-mirrors;请使用上一节中的 SparkCR 镜像别名。
可选:匿名 Transparent Mirror
如果只需要让 Docker Hub 短镜像名经过 SparkCR,并接受更容易触发风控或限流的风险,可以写入 /etc/docker/daemon.json:
{
"registry-mirrors": ["https://docker.sparkcr.cn"]
}重启 Docker 并确认配置已加载:
sudo systemctl restart docker
docker info | grep -i "mirrors" -A 3输出应包含:
Registry Mirrors:
https://docker.sparkcr.cn/此时可以使用短镜像名,但拉取按匿名请求统计:
docker pull hello-world:latest
docker image inspect hello-world:latest配置其他 runtime 或多个公共镜像仓库,请阅读 Runtime 配置。
其他镜像仓库
registry-mirrors 不会接管 GHCR、Quay 等其他镜像仓库。直接拉取 ghcr.io/astral-sh/uv:latest 会访问 GHCR,而不会经过 SparkCR。
要通过 SparkCR 拉取 GHCR 镜像,请使用包含原始仓库域名的完整路径:
docker login sparkcr.cn
docker pull sparkcr.cn/ghcr.io/astral-sh/uv:latest也可以使用 GHCR 别名入口:
docker login ghcr.sparkcr.cn
docker pull ghcr.sparkcr.cn/astral-sh/uv:latest使用别名入口时,每个入口都是不同的 registry host,需要分别执行 docker login。例如 Docker Hub 登录到 docker.sparkcr.cn,GHCR 登录到 ghcr.sparkcr.cn。其他镜像仓库的完整写法见 镜像路径速查。