侧边栏壁纸
  • 累计撰写 6 篇文章
  • 累计创建 1 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Dockerhub无法使用,请问阁下如何应对?4种方法解决问题!

aoarasi
2024-07-23 / 0 评论 / 0 点赞 / 296 阅读 / 10193 字

你说你是一个程序员,你连Github都打不开?好了,现在又多一项,dockerhub也打不开了。

1.背景分析

近期做开发和运维的同学都发现了,dockerhub镜像仓库已经无法正常的访问,同时也无法拉取镜像了,直接访问时出现“无法访问此网站”,并给出超时的返回:ERR_CONNECTION_TIMED_OUTimg

尝试从用docker去拉一些常用的镜像,也是timeout无法拉取,我这台是腾讯云主机,官方云服务器亦是如此。测试发现,默认镜像站点的DNS也被污染和SNI阻断。

img

同时国内的众多镜像站点也纷纷停止服务,比如上海交通大学 Linux 用户组发布的公告:“即时起中止对 Docker Hub 仓库的镜像。Docker 相关工具默认会自动处理失效镜像的回退,如果对官方源有访问困难问题,建议尝试使用其他仍在服务的镜像源”。

img

img

其它国内镜像加速站点也逐渐无法使用,如腾讯docker镜像站:

img

网易docker镜像站:

img

百度docker镜像站:

img

中国科技大学docker镜像站:

img

这波操作打的各位互联网从业者措手不及,纷纷寻求解决办法。你是否受到影响?

2.解决方法

dockerhub无法访问的原因,我们不再去深究,感兴趣的小伙伴可以去检索相关的内容。本次主要讨论解决措施。

如果是企业用户,可能大多数都有自己的镜像仓库,如harbor,短期内可能没有太大的影响,主要为源头拉取镜像时的故障。如果是非自建用户,影响会较大,以下为大家提供了几种解决办法。

2.1 方法1:更换镜像源

经测试,当前还有一些镜像源可以正常使用,可供临时使用,修改方式如下:

sudo mkdir -p /etc/docker
sudo cp -f /etc/docker/daemon.{json,json.bak}
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://docker.m.daocloud.io"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

再次拉取,发现已经可以正常拉取了,我以nginx/mysql为例:

docker pull nginx
docker pull mysql

可以看到已经正常的拉取下来了。

img

注意的是,镜像加速可能随时会失效,注意提前将需要拉取的镜像存放本地,以备不时之需。

2.2 方法2:转储文件

如果你的业务不是很复杂,仅仅需要在工作或生活偶尔拉取几个镜像文件,可以采用手动拉取镜像的方式实现,前提是你需要有一台能够连接国际互联网的云服务器。

假设具备这样的条件,那么可以在云服务器上进行拉取,并手动转储至本地环境进行导入,具体操作如下:

从云服务器上拉取需要的镜像文件,以nginx为例:

# 执行镜像拉取
docker pull nginx

img

在云服务器上导出镜像并下载至需要导入的目标服务器上

# 转储
docker images | grep nginx
docker save -o nginx.tar nginx:latest
# 执行文件下载并传输至需要导入的服务器

img

在目标机器上执行导入

docker load -i nginx.tar

img

这样就完成了镜像的部署。

2.3 方法3:转储仓库

在方法2的条件下,如果你有一台可以连接国际互联网的机器,并且有一台国内云服务器或具备公网的云服务器,那么可以在私有服务器上部署镜像仓库(或使用阿里云镜像服务),在通过拉取镜像后,修改私服的tag,最后推送到私服仓库。

我以阿里云私有镜像仓库为例,阿里云镜像服务:https://cr.console.aliyun.com/

在阿里云中搜索容器镜像服务。

img

找到个人实例:

img

点击创建镜像仓库,比如我创建了一个nginx的仓库,并修改命名空间为yunweizeichuan。img

点击创建本地仓库。

img

根据下方的操作指南在海外服务器上登录,以推送nginx:1.24镜像为例子。

img

所以我这里执行的命令为:

# 登录仓库,xxx为实际用户名
docker login --username=xxx registry.cn-hangzhou.aliyuncs.com
​
# 修改tag
docker tag nginx:1.24 registry.cn-hangzhou.aliyuncs.com/yunweizeichuan/nginx:1.24
​
# 推送镜像
docker push registry.cn-hangzhou.aliyuncs.com/yunweizeichuan/nginx:1.24

即可实现推送,然后使用预先定义的tag即可在任意服务器上下载软件。

img

2.4 方法4:自建加速代理

此处自建代理的方式,不展开讨论实现过程,感兴趣的朋友可自行研究实现。此处提供github地址,供各位朋友参考:

https://github.com/dqzboy/Docker-Proxy

3.总结

以上提供了4种方法解决docker无法拉取镜像的问题,希望能对各位有帮助。

0

评论区