国内直连 Docker Hub 经常超时,或者直接返回一个诡异的 IPv6 地址。下面三种办法按优先级排,通常第一种就能解决。
先确认问题在哪
先别急着改配置,用一条命令判断是 DNS 问题还是网络问题:
docker pull hello-world
nslookup registry-1.docker.io如果 registry-1.docker.io 解析出来的 IP 明显不对,比如落在 2a03:2880::/32 这段,那就是 DNS 被污染了,换 DNS 或者走下面的镜像方案才有用。
提示:公司网络里如果有 HTTP 代理,Docker Desktop 需要单独配置,它不会自动读系统代理变量。
办法一:临时用镜像站拉镜像
不想改任何全局配置时,直接在镜像名前加镜像站前缀:
docker pull docker.m.daocloud.io/library/nginx:1.25-alpine好处是立刻生效,不用重启 Docker Desktop。缺点是每次写镜像名都要带前缀,compose 文件里也会变长。
办法二:配置 registry-mirrors
在 Docker Desktop 的 Settings → Docker Engine 里加一段:
{
"registry-mirrors": ["https://docker.m.daocloud.io"]
}保存后 Docker Desktop 会自己重启。之后 compose 文件里就可以写正常的官方镜像名了,不需要前缀。
办法三:给 Docker 配代理
如果你本机有可用的代理(例如 127.0.0.1:7890),在同一个配置里加上:
{
"proxies": {
"http-proxy": "http://127.0.0.1:7890",
"https-proxy": "http://127.0.0.1:7890"
}
}三种方式的对比:
| 方式 | 生效速度 | 是否需要重启 | 适合场景 |
|---|---|---|---|
| 镜像名加前缀 | 立刻 | 否 | 临时拉一两个镜像 |
| registry-mirrors | 重启后 | 是 | 长期使用 |
| 配代理 | 重启后 | 是 | 有稳定代理时 |
验证是否成功
最后跑一条:
docker pull library/busybox:latest能看到 Status: Downloaded newer image 就说明通了。
暂无评论