故障现象

  • 继去年Docker Hub被封锁后,各大NAS的注册表均出现问题,例如群晖的Docker套件注册表无法连接(更新至DSM7.2版本后恢复)。

  • 而在今年2024年6月初(约2024.06.06),NAS中最重要的工具Docker又面临无法使用的问题。

  • 常用镜像站:阿里云、科大、南大、上交等,全部挂掉。

  • 执行docker pull命令拉取docker镜像时无反应,一直在循环尝试。

  • 出现下述错误

猜测原因

  • 下面的说法来源于网络

  • 2024.06.06,上海交大的Docker Hub镜像加速器宣布因为监管要求被下架。

  • index服务器被DNS污染,导致无法拉取镜像。

  • 做好全面脱钩的准备

  • 自主知识产权的国产Docker将会横空出世

  • 临时性管控(过段时间就恢复)

最新方法

再次提醒!多种方法自行尝试,总有一款适合你,亲测可行!

镜像地址从旧到新依次尝试,群晖注册表镜像URL在WEB页面最多可添加10个,其他NAS系统或显示为镜像代理地址、镜像加速地址,自行灵活应变!

镜像注册表地址大全(使用教程看下面)

  • 以下全部来自网络收集

    #######------ 下为早期搜集 ------######
    
    #这个不一定可行,可能是我测试时遇到一些问题。
    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
    
    # 20241214新增
    https://proxy.1panel.live
    https://docker.1panel.top
    https://docker.1ms.run
    https://docker.ketches.cn
    
    # 20250108新增
    https://hub.dftianyi.top
    https://hub.xdark.top
    https://hub.littlediary.cn
    https://dockerpull.org
    
    # 20250110新增
    https://xdark.top
    https://docker.xuanyuan.me
    https://docker.1ms.run
    https://docker.211678.top
    https://docker.udayun.com
    https://docker.hlmirror.com
    https://docker.1panelproxy.com
    https://docker.kejilion.pro
    https://cjie.eu.org
    https://dhub.kubesre.xyz
    https://hub.rat.dev
    https://hub.littlediary.cn
    https://hub.firefly.store
    https://docker.imgdb.de
    https://registry.dockermirror.com
    https://docker-0.unsee.tech
    
    # 20250116新增
    https://hub.dftianyi.top
    https://hub.xdark.top
    https://hub.littlediary.cn
    https://docker.ketches.cn
    https://hub1.nat.tf
    https://hub2.nat.tf
    https://dockerproxy.1panel.live
    https://docker.1panel.dev
    https://docker.anye.in
    https://docker.amingg.com
    https://dk.nastool.de
    https://hub.nastool.de
    
    # 20250117新增
    https://mirror.aliyuncs.com
    https://mirror.baidubce.com
    https://docker.nju.edu.cn
    https://docker.mirrors.ustc.edu.cn
    https://docker.mirrors.sjtug.sjtu.edu.cn
    https://mirror.iscas.ac.cn

增加Docker镜像注册表地址(20240621新+后续不定时补充)

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

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

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

  4. 默认的注册表选择使用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/其他系统挂梯子

  • 自行查找方法,敏感内容不在博客展示。

Linux系统手动修改Docker镜像地址

  1. 修改的前提是Linux系统已经安装了Docker,并且正常运行。

  2. 演示是在Debian系统上演示

  3. 使用终端软件连接Linux系统,并切换到root状态下。

  4. 修改/etc/docker/daemon.json文件

    vim /etc/docker/daemon.json
  5. 按字母 i 键进入编辑模式,修改daemon.json文件,改为如下镜像地址,按Esc键退出编辑模式,输入 :wq 保存并退出。
    (镜像地址自行添加/修改,灵活动脑思考。)

    {
     "registry-mirrors": ["https://docker.registry.cyou",
    "https://docker-cf.registry.cyou",
    "https://dockercf.jsdelivr.fyi",
    "https://docker.jsdelivr.fyi",
    "https://dockertest.jsdelivr.fyi",
    "https://mirror.aliyuncs.com",
    "https://dockerproxy.com",
    "https://mirror.baidubce.com",
    "https://docker.m.daocloud.io",
    "https://docker.nju.edu.cn",
    "https://docker.mirrors.sjtug.sjtu.edu.cn",
    "https://docker.mirrors.ustc.edu.cn",
    "https://mirror.iscas.ac.cn",
    "https://docker.rainbond.cc"]
    }
  6. 重新加载配置文件

    systemctl daemon-reload
  7. 重新启动Docker

    systemctl restart docker
  8. 重新执行命令拉取镜像,可以看到恢复正常。
    (Docker被墙的情况下,拉取镜像会多等一会,非卡死。)

    root@hcss-ecs-4063:/etc/docker# docker pull mysql:8.0
    8.0: Pulling from library/mysql
    2c0a233485c3: Pull complete
    b746eccf8a0b: Pull complete
    570d30cf82c5: Pull complete
    c7d84c48f09d: Pull complete
    e9ecf1ccdd2a: Pull complete
    6331406986f7: Pull complete
    f93598758d10: Pull complete
    6c136cb242f2: Pull complete
    d255d476cd34: Pull complete
    dbfe60d9fe24: Pull complete
    9cb9659be67b: Pull complete
    Digest: sha256:d58ac93387f644e4e040c636b8f50494e78e5afc27ca0a87348b2f577da2b7ff
    Status: Downloaded newer image for mysql:8.0
    docker.io/library/mysql:8.0
    root@hcss-ecs-4063:/etc/docker#
  9. 启动Docker并设置Docker开机自启(扩展命令,非必需执行。)

    # 启动Docker服务
    sudo systemctl start docker
    
    # 设置Docker服务开机自启
    sudo systemctl enable docker

手动导入已有镜像文件

  • 自行获取/微信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

项目地址

功德+1(狗子).gif

👇👇👇