故障现象

  • 继去年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新+后续不定时补充)

  1. 演示以群晖NAS系统上修改为例(其他系统自行探索方法)

  2. 打开群晖的Container Manager(Docker)套件,点击注册表--设置--Docker Hub(v1)--编辑。

  3. 勾选启用注册表镜像,新增下面两个地址,然后点击应用。

  4. 注册表镜像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
    
  5. 默认的注册表选择使用Docker Hub(v1),然后再拉取镜像即可。

增加Docker镜像注册表地址(20240616仍可行)

  1. 演示以群晖NAS系统上修改为例(其他系统自行探索方法)

  2. 打开群晖的Container Manager(Docker)套件,点击注册表--设置。

  3. 点击Docker Hub的存储库,然后点击编辑。

  4. 点击新增,添加下面两个地址,然后点击应用。

    https://docker.shootchat.top
    
    https://do.nark.eu.org
  5. 看到跳出的提示即可(群晖DSM7.2版本的存储库可选择Docker Hub(v1)

  6. 然后打开群晖的SSH功能,使用终端软件进行连接,并切换到root状态下。
    image-pmrl.png

  7. 正常拉取镜像即可

    未修改前
    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代理

  1. 访问下面的网站

    https://dockerproxy.com/

  2. 拉到底部,将你需要拉取的docker镜像名和版本粘贴到里面。
    然后点击获取命令

  3. 然后依次在NAS上使用SSH终端,执行这三个命令。

  4. 上面的全部做完后,就可以正常的使用docker clidocker-compose创建容器了。

  5. 如果有多个docker镜像需要使用,就重复前面的步骤,换成需要的docker镜像名和版本。

GitHub开源docker镜像加速项目

  1. 访问此项目

    https://github.com/DaoCloud/public-image-mirror
  2. 与上面是同样的方法,使用代理名称拉取后再改回去。

  3. 例如拉取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
  4. 重命名docker镜像

    #格式为 docker tag 代理镜像名:版本 原始镜像名:版本
    
    docker tag m.daocloud.io/docker.io/jellyfin/jellyfin:10.9.2 jellyfin/jellyfin:10.9.2
  5. 删除代理的镜像

    #格式为 docker rmi 代理镜像名:版本
    
    docker rmi m.daocloud.io/docker.io/jellyfin/jellyfin:10.9.2

其他镜像加速源

Windows端Linux子系统导出镜像

  1. 常规的Clash代理并不一定可以帮助你docker pull下来镜像,给各个系统挂梯子也麻烦。
    那就直接给Windows挂梯子,教程最多,也最简单,调试也方便。
    演示将在Windows端的Linux子系统(Ubuntu2404)上进行拉取镜像并导出镜像文件。

  2. 给你的Windows系统挂梯子(自行解决)

  3. 进入Linux子系统,切换到root后正常的docker pull下来你所需的镜像。

    #演示拉取jellyfin官方的10.9.2版本
    
    docker pull jellyfin/jellyfin:10.9.2
  4. 查看镜像列表

    docker images
  5. 导出docker镜像
    (演示以群晖NAS系统上导出的镜像命名格式为例)

    #格式为 docker save 原始镜像名和版本 -o “镜像方-镜像名(版本).syno.tar"
    #需要注意的是前的镜像名是/ 后面的镜像名将/换成-,镜像版本换成-符号代理.符号,并以”“符号圈住后面的镜像文件,
    #左为原始镜像名,右为需要保存的镜像文件名。
    
    docker save jellyfin/jellyfin:10.9.2 -o "jellyfin-jellyfin(10-9-2).syno.tar"
  6. Linux系统上导出的镜像默认保存位置是在/root路径下

    #进入/root路径
    
    cd /root
  7. 查看当前文件夹内的文件

    ls
  8. 带有tag标签的docker镜像文件是包含"符号的

    root@localhost:~# ls
    'jellyfin-jellyfin(10-9-2).syno.tar'   snap
    root@localhost:~#
  9. 将导出的镜像移动到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/
  10. 然后你就获取了一个带有TAG标签的docker镜像,可以直接导入到群晖NAS上。
    打开群晖的Docker套件--映像--操作--导入--从文件添加--从本地设备

  11. 如果是其他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
  12. 查看docker镜像列表

    docker images

项目地址

  • GitHub项目地址:https://github.com/DaoCloud/public-image-mirror

功德+1(狗子).gif

👇👇👇