最近我重新整理了一下测试机的 Docker 镜像源。问题不是没有镜像源,而是配置里混着很多历史地址:有些早就连不上,有些只适合 Docker Hub,有些对 GHCR、Quay、MCR 完全没帮助。
所以这次不再写"一串地址复制走",而是按来源分组。
先分清来源
| 来源 | 示例镜像 | 可试入口 |
|---|---|---|
| Docker Hub | nginx:alpine |
docker.1ms.run |
| Docker Hub | library/nginx:alpine |
docker.m.daocloud.io |
| GHCR | open-webui/open-webui:main |
ghcr.1ms.run |
| K8s | pause:3.10 |
k8s.1ms.run |
| Quay | prometheus/prometheus:latest |
quay.1ms.run |
| MCR | playwright/mcp |
mcr.1ms.run |
先测 registry 是否有响应
bash
curl -I https://docker.1ms.run/v2/
curl -I https://docker.m.daocloud.io/v2/
curl -I https://m.daocloud.io/v2/
401 Unauthorized 不代表失败。Registry 端点要求鉴权很常见,这至少说明服务有响应。
Docker Hub 配置
/etc/docker/daemon.json:
json
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.m.daocloud.io"
]
}
重启:
bash
sudo systemctl daemon-reload
sudo systemctl restart docker
docker info | grep -A 10 "Registry Mirrors"
多源镜像直接换地址
GHCR:
bash
docker pull ghcr.1ms.run/open-webui/open-webui:main
MCR:
bash
docker pull mcr.1ms.run/playwright/mcp
Quay:
bash
docker pull quay.1ms.run/prometheus/prometheus:latest
K8s:
bash
docker pull k8s.1ms.run/pause:3.10
这比把所有问题都塞给 registry-mirrors 清晰很多。
老源我不会放主配置
这些地址在旧教程里常见:
text
hub-mirror.c.163.com
reg-mirror.qiniu.com
dockerproxy.com
dockerhub.icu
我的做法是:临时排查可以试,团队机器不放第一顺位。因为维护状态、证书、解析和覆盖范围都不够可控。
最后
镜像源配置的重点不是"地址越多越好",而是能不能解释每个地址解决什么来源。
Docker Hub 用 Docker Hub mirror。GHCR、Quay、MCR、K8s 分别换对应入口。CI runner 和 K8s 节点尤其要这样做,否则一次失败日志里会混着多个上游源,很难定位。