docker run hello-world跑第一个镜像竟然提示链接超时取消,下载不下来,错误信息如下图:
运行Docker的机器是可以上网的,奈何docker hub 部署在国外,从国内访问会受限,整理解决方案如下:
方案一:配置国内镜像加速器(最推荐,解决访问慢/被限速)
通过修改 Docker 配置文件,让拉取请求走国内镜像代理
- 编辑(或创建)Docker 守护进程配置文件:
bash
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": [ "https://docker.m.daocloud.io", "https://dockerproxy.com", "https://docker.nju.edu.cn" ] } EOF以上为目前可用的公共镜像源,也可以登录阿里云/腾讯云容器服务获取个人专属加速地址,想知道怎么获取个人专属加速地址,请看下一篇文章。
- 重载配置并重启 Docker:
bash
sudo systemctl daemon-reload sudo systemctl restart docker
重启之后看一下docker是否重新加载配置,输入:
docker info | grep -A 5 "Registry Mirrors"
输出结果如上图所示说明配置已重新加载。
- 3.重试命令:
bash
docker run hello-world
如果配置了公共镜像源还是不行,则可以先执行
curl -I https://docker.m.daocloud.io/v2/
看看执行后报的错误再具体分析。
方案二:检查并更换 DNS 服务器
如果配置镜像后依然超时,很可能是 DNS 无法解析registry-1.docker.io或镜像域名。
测试当前 DNS 解析速度:
bash
time nslookup registry-1.docker.io
如果耗时超过 2 秒或解析失败,说明 DNS 有问题。如果没有nslookup命令可以改成ping,ping -c 4 registry-1.docker.io
修改系统 DNS(以 CentOS7 为例,编辑
/etc/resolv.conf):bash
sudo echo "nameserver 114.114.114.114" > /etc/resolv.conf sudo echo "nameserver 8.8.8.8" >> /etc/resolv.conf
(注意:如果系统使用 NetworkManager 或 systemd-resolved,该文件重启后会被覆盖,需永久固化配置,建议先临时测试)
再次重启 Docker 并重试。基本能解决问题。
最主要的解决方案还是配置国内的镜像下载加速器,配置好重启docker基本解决问题。