解决Docker镜像无法拉取问题
故障现象
继去年Docker Hub被封锁后,各大NAS的注册表均出现问题,例如群晖的Docker套件注册表无法连接(更新至DSM7.2版本后恢复)。
而在今年2024年6月初(约2024.06.06),NAS中最重要的工具Docker又面临无法使用的问题。
常用镜像站:阿里云、科大、南大、上交等,全部挂掉。
执行docker pull命令拉取docker镜像时无反应,一直在循环尝试。
出现下述错误
猜测原因
下面的说法来源于网络
2024.06.06,上海交大的Docker Hub镜像加速器宣布因为监管要求被下架。
index服务器被DNS污染,导致无法拉取镜像。
做好全面脱钩的准备
自主知识产权的国产Docker将会横空出世
临时性管控(过段时间就恢复)
最新方法
再次提醒!多种方法自行尝试,总有一款适合你,亲测可行!
镜像注册表地址大全(使用教程看下面)
网络收集
#######------ 下为早期搜集 ------###### #这个不一定可行,可能是我测试时遇到一些问题。 https://huecher.io #这个实测可行 https://dockerhub.timeweb.cloud # 20240624补充下面两个地址 https://docker.m.daocloud.io https://noohub.ru # 20240702补充(威联通QNAP)京东官方店铺公告,自测。) # docker AgsvPT官方镜像源 主地址 https://docker.agsv.top 备用地址 https://docker.agsvpt.work # 20240713补充 https://hub.iyuu.cn # 20240717补充 https://docker.shootchat.top #######------ 下为20240718及以后补充 ------###### https://do.nark.eu.org # bestcfips镜像服务 https://docker.registry.cyou https://docker-cf.registry.cyou # zero_free镜像服务 https://docker.jsdelivr.fyi https://dockercf.jsdelivr.fyi https://dockertest.jsdelivr.fyi # docker proxy https://dockerpull.com https://dockerproxy.cn # Docker镜像加速站 https://hub.uuuadc.top https://docker.1panel.live https://hub.rat.dev https://docker.ckyl.me # Docker Hub镜像加速代理 https://docker.anyhub.us.kg https://docker.chenby.cn https://dockerhub.jobcher.com # 镜像使用说明 https://dockerhub.icu https://docker.hpcloud.cloud # DaoCloud镜像站 https://docker.m.daocloud.io # AtomeHub可信镜像仓库平台(只包含基础镜像,共336个。) https://atomhub.openatom.cn # 20240904新增 https://docker.rainbond.cc
增加Docker镜像注册表地址(20240621新+后续不定时补充)
演示以群晖NAS系统上修改为例(其他系统自行探索方法)
打开群晖的
Container Manager
(Docker)套件,点击注册表--设置--Docker Hub(v1)--编辑。勾选启用注册表镜像,新增下面两个地址,然后点击应用。
注册表镜像URL
#这个不一定可行,可能是我测试时遇到一些问题。 https://huecher.io #这个实测可行 https://dockerhub.timeweb.cloud # 20240624补充下面两个地址 https://docker.m.daocloud.io https://noohub.ru # 20240702补充(威联通QNAP)京东官方店铺公告,自测。) # docker AgsvPT官方镜像源 主地址 https://docker.agsv.top 备用地址 https://docker.agsvpt.work # 20240713补充 https://hub.iyuu.cn # 20240717补充 https://docker.shootchat.top
默认的注册表选择使用Docker Hub(v1),然后再拉取镜像即可。
增加Docker镜像注册表地址(20240616仍可行)
演示以群晖NAS系统上修改为例(其他系统自行探索方法)
打开群晖的
Container Manager
(Docker)套件,点击注册表--设置。点击Docker Hub的存储库,然后点击编辑。
点击新增,添加下面两个地址,然后点击应用。
https://docker.shootchat.top https://do.nark.eu.org
看到跳出的提示即可(
群晖DSM7.2版本的存储库可选择Docker Hub(v1)
)然后打开群晖的SSH功能,使用终端软件进行连接,并切换到root状态下。
正常拉取镜像即可
未修改前 root@nas:# docker pull mysql:8.0 8.0: Pulling from library/mysql 07bc88e18c4a: Already exists 2546f0005eef: Pulling fs layer 1021dda8eecf: Pulling fs layer 1bb57662dd7f: Pulling fs layer 7fb14d8034cd: Waiting 73124c42ecbe: Waiting 74830c23cea0: Waiting 0139fa284505: Waiting 5165942f42d6: Waiting 2915d634a344: Waiting 9a1f1e1ee309: Waiting 修改后 root@nas:# docker pull mysql:8.0 8.0: Pulling from library/mysql 07bc88e18c4a: Already exists 2546f0005eef: Pull complete 1021dda8eecf: Pull complete 1bb57662dd7f: Pull complete 7fb14d8034cd: Pull complete 73124c42ecbe: Pull complete 74830c23cea0: Pull complete 0139fa284505: Pull complete 5165942f42d6: Pull complete 2915d634a344: Pull complete 9a1f1e1ee309: Pull complete Digest: sha256:7cf8a10b3c17273a47c5cd876cdb790c551012b40b36909b8ca0d9ab5721ed2c Status: Downloaded newer image for mysql:8.0 docker.io/library/mysql:8.0 root@nas:#
历史教程(部分可用)
再次提醒!多种方法自行尝试,总有一款适合你,亲测可行!
挂梯子
给自己的NAS/其他系统挂梯子
自行查找方法,敏感内容不在博客展示。
手动导入已有镜像文件
自行获取/
微信S20306找我
需要使用的docker镜像,然后导入到NAS系统内(大部分NAS系统直接WEB页面导入)。例如导入一个存放在NAS文件夹内的docker镜像文件(纯命令行操作导入)
进入存放镜像文件的文件夹
#进入你实际存放文件的文件夹,这只是个演示路径! cd /volume1/docker
执行命令,导入docker镜像。
(此命令会按照你docker镜像文件的原格式生成镜像名和版本)#格式为 docker load -i "docker镜像文件名" docker load -i "jellyfin-jellyfin(10-9-2).syno.tar"
然后查看本地docker镜像列表
docker images
docker代理
访问下面的网站
https://dockerproxy.com/
拉到底部,将你需要拉取的docker镜像名和版本粘贴到里面。
然后点击获取命令然后依次在NAS上使用SSH终端,执行这三个命令。
上面的全部做完后,就可以正常的使用
docker cli
、docker-compose
创建容器了。如果有多个docker镜像需要使用,就重复前面的步骤,换成需要的docker镜像名和版本。
GitHub开源docker镜像加速项目
访问此项目
https://github.com/DaoCloud/public-image-mirror
与上面是同样的方法,使用代理名称拉取后再改回去。
例如拉取Docker Hub仓库的jellyfin/jellyfin:10.9.2版本docker镜像
#将jellyfin/jellyfin:10.9.2换成你需要的镜像名和版本 docker pull m.daocloud.io/docker.io/jellyfin/jellyfin:10.9.2
重命名docker镜像
#格式为 docker tag 代理镜像名:版本 原始镜像名:版本 docker tag m.daocloud.io/docker.io/jellyfin/jellyfin:10.9.2 jellyfin/jellyfin:10.9.2
删除代理的镜像
#格式为 docker rmi 代理镜像名:版本 docker rmi m.daocloud.io/docker.io/jellyfin/jellyfin:10.9.2
其他镜像加速源
Windows端Linux子系统导出镜像
常规的Clash代理并不一定可以帮助你docker pull下来镜像,给各个系统挂梯子也麻烦。
那就直接给Windows挂梯子,教程最多,也最简单,调试也方便。
演示将在Windows端的Linux子系统(Ubuntu2404)上进行拉取镜像并导出镜像文件。给你的Windows系统挂梯子(自行解决)
进入Linux子系统,切换到
root
后正常的docker pull下来你所需的镜像。#演示拉取jellyfin官方的10.9.2版本 docker pull jellyfin/jellyfin:10.9.2
查看镜像列表
docker images
导出docker镜像
(演示以群晖NAS系统上导出的镜像命名格式为例)#格式为 docker save 原始镜像名和版本 -o “镜像方-镜像名(版本).syno.tar" #需要注意的是前的镜像名是/ 后面的镜像名将/换成-,镜像版本换成-符号代理.符号,并以”“符号圈住后面的镜像文件, #左为原始镜像名,右为需要保存的镜像文件名。 docker save jellyfin/jellyfin:10.9.2 -o "jellyfin-jellyfin(10-9-2).syno.tar"
Linux系统上导出的镜像默认保存位置是在
/root
路径下#进入/root路径 cd /root
查看当前文件夹内的文件
ls
带有tag标签的docker镜像文件是包含"符号的
root@localhost:~# ls 'jellyfin-jellyfin(10-9-2).syno.tar' snap root@localhost:~#
将导出的镜像移动到Windows系统上指定的文件夹下
#将当前目录下的'jellyfin-jellyfin(10-9-2).syno.tar'文件移动到Windows系统C盘的默认下载文件夹下 #换成你自己实际的文件夹路径,Windows文件夹路径在/mnt/c路径下。 #格式为mv docker镜像文件 移动到指定的文件夹路径 mv 'jellyfin-jellyfin(10-9-2).syno.tar' /mnt/c/Users/S20306/Downloads/
然后你就获取了一个带有TAG标签的docker镜像,可以直接导入到群晖NAS上。
打开群晖的Docker套件--映像--操作--导入--从文件添加--从本地设备如果是其他NAS/Linux系统,可以将文件放到文件夹内,然后进入存放镜像的文件夹路径下,执行下面的命令导入docker镜像。
#格式 docker load < docker镜像文件 docker load < 'jellyfin-jellyfin(10-9-2).syno.tar' #完整实例 root@localhost:~# docker load < 'jellyfin-jellyfin(10-9-2).syno.tar' cf8a3233dc27: Loading layer [==================================================>] 2.048kB/2.048kB e85f146498c1: Loading layer [==================================================>] 156.4MB/156.4MB 87ffad5c15db: Loading layer [==================================================>] 57.47MB/57.47MB Loaded image: jellyfin/jellyfin:10.9.2
查看docker镜像列表
docker images
项目地址
GitHub项目地址:https://github.com/DaoCloud/public-image-mirror
👇👇👇
- 感谢你赐予我前进的力量