Docker拉取镜像/ 搜索失败问题的彻底解决方案
前言
Docker 网络相关问题(如拉取镜像、搜索镜像时超时或报错)是使用过程中常见的困扰,尤其国内用户常受官方镜像源访问慢、DNS 解析异常等问题影响。本文将详细梳理问题根源,提供从镜像加速、DNS 配置到代理设置的完整解决流程,帮你彻底解决相关网络故障。
一、问题现象与核心原因
常见报错
拉取镜像时卡顿超时,始终停留在 “Pulling from xxx” 阶段。

明确报错:
Error response from daemon: Get "https://index.docker.io/v1/search?q=ubuntu&n=25": dial tcp: lookup index.docker.io on 127.0.0.53:53: server misbehaving。配置国内加速源后,问题仍未解决,镜像仍优先尝试连接官方源
https://registry-1.docker.io/v2/。
核心原因
国内网络访问 Docker 官方镜像源存在天然限制,速度慢且易中断。
Docker 守护进程与容器的 DNS 配置相互独立,容器 DNS 配置不影响守护进程拉取镜像时的 DNS 解析。
Docker 守护进程不会继承终端的代理环境变量,需单独配置代理才能通过科学上网访问镜像源。
二、分步解决流程
第一步:配置国内镜像加速源
国内加速源仅作为官方源的辅助加速通道,无法解决 DNS 或网络访问限制问题,但能提升后续访问成功率。
编辑 Docker 守护进程配置文件:
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.imgdb.de",
"https://docker-0.unsee.tech",
"https://docker.hlmirror.com",
"https://docker.1ms.run",
"https://func.ink",
"https://lispy.org",
"https://docker.xiaogenban1993.com"
]
}
EOF2.重新加载配置并重启 Docker:
sudo systemctl daemon-reload && sudo systemctl restart docker
后来才发现 docker还是首先去其官方拉取 "https://registry-1.docker.io/v2/" ,我们所谓的国内加速源是起到一个辅助加速作用。
我们的daemon.json 配得没问题了之后,再去运行拉取,发现还是报错了。
Error response from daemon: Get "https://index.docker.io/v1/search?q=ubuntu&n=25": dial tcp: lookup index.docker.io on 127.0.0.53:53: server misbehaving
这时候我们会想是不是 DNS域名 解析的问题。 我们一般会又去检查 daemon.json文件,然后给它添加域名解析

会发现还是会报错,重启docker之后也还会。 这时候就可以发现其实是我们的docker的守护进程的问题,是Docker 守护进程自己在用 127.0.0.53 这个 DNS,而不是你在 daemon.json 里配的那些 8.8.8.8 / 223.5.5.5。
"dns": [...] 这项只影响 容器里的 /etc/resolv.conf, 但是 Docker 守护进程拉镜像时的 DNS 仍走的是宿主机的 /etc/resolv.conf(现在是 127.0.0.53,那就是 systemd-resolved 的 stub)。
然后我们就需要去更改宿主机里面的设置。
第二步:修复 Docker 守护进程 DNS 解析问题
Docker 守护进程拉取镜像时使用的是宿主机的 /etc/resolv.conf 配置,而非 daemon.json 中的 dns 字段,需通过修改系统 DNS 解决解析异常。
编辑系统 DNS 配置文件
sudo nano /etc/systemd/resolved.conf
把里面改成类似这样(没有就加,有就改):
[Resolve] DNS=8.8.8.8 223.5.5.5 114.114.114.114 FallbackDNS=1.1.1.1 # 可选:如果你有本地默认域,就留着;没有就可以注释掉 # Domains=~.
(2)重启 systemd-resolved:
sudo systemctl restart systemd-resolved
(3) 确认现在 DNS 正常工作:
resolvectl status resolvectl query index.docker.io

这样的话,说明我们已经把DNS解析的问题弄好了。
(4)再重启 Docker:
sudo systemctl restart docker
(5)再试一次 Docker 搜索:
sudo docker search ubuntu
但是发现还是报错了,这时候就需要 科学上网了。
第三步:配置 Docker 守护进程代理(科学上网)
(1)先确认自己的虚拟机里面开代理是否能访问Docker Hub:
# 1. 开启终端代理 export http_proxy="http://127.0.0.1:7890" export https_proxy="http://127.0.0.1:7890" # 2. 用 curl 直接请求 Docker Hub 的 search 接口 curl "https://index.docker.io/v1/search?q=ubuntu&n=5" -v

若 curl 命令返回 200 状态码且能获取搜索结果,说明终端代理有效。
(2)给 Docker 守护进程配置 HTTP/HTTPS 代理
Docker 是一个 systemd 服务,它不会自动继承你终端里的 export http_proxy, 要 单独给 dockerd 配置环境变量。
创建配置目录:
sudo mkdir -p /etc/systemd/system/docker.service.d
新建代理配置文件:
sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf
写入
[Service] Environment="HTTP_PROXY=http://127.0.0.1:7890" Environment="HTTPS_PROXY=http://127.0.0.1:7890" Environment="NO_PROXY=localhost,127.0.0.1,::1"
让 systemd 重新加载服务配置并重启 Docker:
sudo systemctl daemon-reload sudo systemctl restart docker
验证 dockerd 确实带上了代理环境变量:
systemctl show docker | grep -i environment

发现ok
再试一次 docker search
sudo docker search ubuntu

问题解决。
总结
到此这篇关于Docker拉取镜像/搜索失败问题彻底解决方案的文章就介绍到这了,更多相关Docker拉取镜像搜索失败问题内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Docker部署SpringBoot项目,本地运行正常,部署至服务器报错zip file close
这篇文章主要介绍了Docker部署SpringBoot项目,本地运行正常,部署至服务器报错zip file closed问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-06-06
Windows11安装Docker Desktop教程的图文教程
本文主要介绍一下Windows11安装Docker Desktop教程的图文教程,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2024-10-10
使用docker的python基础镜像时要指定patch版本原理
这篇文章主要为大家介绍了使用docker的python基础镜像时要指定patch版本原理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-10-10
Centos7安装Docker(2020最新亲测可用,直接复制粘贴即可)
这篇文章主要介绍了Centos7安装Docker(2020最新亲测可用,直接复制粘贴即可),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2021-01-01
docker compose安装es+kibana 8.12.2的详细过程
因云平台需要改造,es7升级为es8,所以记录一下,es8需要开启ssl认证,需要配置证书,全本带你用docker安装,便于后面es8的学习,这篇文章主要介绍了docker compose安装es+kibana 8.12.2的详细过程,感兴趣的朋友跟随小编一起看看吧2024-05-05


最新评论