docker search mysql报错问题分析及解决
作者:Geo_V
问题描述
云服务器安装完 Docker 之后,想安装 mysql,但是通过命令 docker search mysql 查看相应版本信息时报错超时,具体信息如下:
Error response from daemon: Get “https://index.docker.io/v1/search?q=mysql&n=25”: dial tcp 65.49.26.99:443: i/o timeout
问题分析
1、修改配置文件
将之前 /etc/docker/daemon.json 文件中配置的镜像源修改为腾讯云镜像源。
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
}
2、重启 Docker 服务
sudo systemctl daemon-reload sudo systemctl restart docker
3、验证是否生效
docker info | grep -A 3 "Registry Mirrors"
输出中如果包含以下信息,则说明镜像源配置成功:
Registry Mirrors: https://mirror.ccs.tencentyun.com/

但此时通过命令 docker search mysql 查看相应版本信息时依然报超时错误。

这个时候就需要查看是否是服务器出口访问受限或者是 DNS 配置异常。
4、测试是否能直连 Docker Hub
curl -v https://index.docker.io/v1/
如果输出包含 HTTP/1.1 200 OK,说明可以访问。但此时我们发现一直处于连接中的状态:

5、测试 DNS 解析
nslookup index.docker.io
或
dig index.docker.io
看是否能解析出 IP 地址。此处可以 IP 地址是可以正常解析的:

6、查看当前 DNS 设置
cat /etc/resolv.conf

此处可以看到 nameserver 是腾讯云的默认内网 DNS,也没有问题,无需修改。
那最终能确定问题可能出在:
Docker Hub(index.docker.io)国外服务器被防火墙或路由策略阻断导致。这是国内腾讯云机器非常常见的问题:Ping、nslookup 都通,但访问 https://index.docker.io(443 端口)超时。
表现就是现在的错误:
dial tcp 64.13.192.74:443: i/o timeout
解决方法
Docker 搜索(docker search) 默认走的是 Docker Hub API(index.docker.io),而不是镜像加速器镜像源(registry)。所以即使设置了 "registry-mirrors",docker search 仍可能访问不到。
所以有两个选择:
1、直接拉取镜像
不再用 docker search,直接拉取镜像。例如拉取 MySQL:
docker pull mysql:8.0.43-debian
注意:腾讯云镜像加速器支持加速拉取,但不支持 docker search。也就是说我们可以按刚才的配置,拉镜像没问题,但搜索会超时。
2、使用国内镜像站搜索镜像
如果非要先搜索一下,再决定是否要拉取的话,就只能通过国内的一些镜像站先搜索,再去拉取,以下是一个在 GitHub 维护的仓库,里面有不少镜像站,大家可以搜索看看:
- DockerHub 国内加速镜像列表
https://github.com/dongyubin/DockerHub
在上面搜索 mysql,可以找到对应版本,然后复制镜像拉取命令。
总结
到此这篇关于docker search mysql报错问题分析及解决的文章就介绍到这了,更多相关docker search mysql报错内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
