Docker镜像下载慢/失败?Linux代理使用不便?想无Docker下载镜像?试试我这款开源项目吧

你在工作中有没有遇到过这样几个问题:

  • 镜像下载速度慢,明明带宽够用文件不大但是要下载很久
  • 镜像仓库经常抽风,有过下载镜像失败的经历,等一段时间再试试或许能成功
  • 自己有代理工具,但是在Linux平台上使用起来很麻烦,可能好不容易配好环境了下载镜像还报错
  • 通过堡垒机访问的远程服务器无法访问外网,需要自己下载镜像后载入,但本机没有Docker环境,处理起来很麻烦

以上几个问题相信很多开发者都经历过,在下载Docker镜像的时候真的是一波三折,而且最近传闻有股神秘力量导致中国无法下载Docker镜像(只是传闻,零星在几个交流群看到有人提起,没刷到过相关文章不知道信息是否真实,有人知道咋回事儿麻烦评论解释下),种种原因叠加之下,我兴起了编写一款基于HTTP协议下载Docker镜像的想法

去年我就有过这种想法,当时我在网上四处查找资料,在码云上发现了基于GO语言编写的dget开源项目,但下载后发现并不好用,提了issues也没能解决我的问题,事情就不了了之

最近听说中国无法下载Docker镜像后,我又起了这个想法,在Github上发现了基于Python编写的docker-drag开源项目,下载后发现还是不能用,不过通过它提供的README信息,我在Docker官方文档中找到了 HTTP API 资料

现在向大家介绍我历经一个礼拜啃文档写出的 did-tool(Docker image download tool)Docker镜像下载工具,基于Java语言参考 HTTP API V2 文档编写的命令行工具,支持无Docker下载镜像,支持使用HTTP/Socket代理加速下载,可跨平台(执行JAR包即可)使用,源代码已在码云上开源,感兴趣的可以去看看

工具使用很方便,如果有帮到你的话麻烦给个Star吧~ 使用教程参考这个GIF:

论坛放不了GIF图片,这里贴个链接:https://img2024.cnblogs.com/blog/1772049/202406/1772049-20240615190038722-1822671387.gif

文章首发地址在博客园,原文地址:https://www.cnblogs.com/hanzhe/p/18249602,这个是博客园官方的地址非引流,而且两篇文章我都是原作者

5 个赞

感谢分享
这种方式不利于获取镜像更新的提醒
我目前的方式是给docker.service加上了代理
代理上有规则做分流

1 个赞

我昨天晚上还想到这个方法呢
不过相比于在客户端上运行这个功能,我更倾向于在国外的服务器上运行,然后直接给客户端发送打包好的tar
毕竟绝大部分情况下客户端是可以给docker 服务设置代理pull镜像的,而如果没有代理服务,那在客户端运行脚本去官方源拉tar也不大好使
但是如果有了国外的服务器,在服务器上运行代码给客户端提供tar,虽然省去了客户端设置代理的过程,但是既然都有服务器了,为什么不直接搭建个镜像呢,也省去了导入tar的过程
可能楼主这个在一些内网环境下有大用处吧,不过这种环境我就没接触过了

感谢

1 个赞

现在主流的代理都是在 win 上使用客户端软件导入订阅使用 shadowsocks 和 vmess 协议的代理,这种代理在 Linux 服务器命令行上不是很方便,就算配置成功了换一台服务器还是要重新折腾一回,截止到目前我没有发现 linux 命令行上有比较成熟的代理工具

另外你说的不利于Docker镜像的更新,这一点我确实没考虑过,我的想法是使用这个工具前一定是明确了想要使用的版本,而且我本人也确实很少更新Docker镜像,如果不更换服务器的话基本是下哪个版本用哪个版本一直用到失效

1 个赞

DockerHub 的网络并不是特别稳定,我就经常遇到 docker pull 下载失败的情况,有些企业用户为了安全会禁止服务器联网,必须手动下载镜像上传后载入进去,而且不是谁都有国外服务器的,不过梯子就不一样了,用到 Docker 的基本上都是互联网公司,就算自己没有梯子问一圈基本也就问到了,互联网公司不可能全员一个梯子都没有

我服务器都在国外,所以还好,确实不常更新的话楼主的方法也挺好的

我家里有个群晖,我用的是 metacubex/mihomo:latest 配合的前端UI是 ghcr.io/metacubex/metacubexd:latest

在群晖上修改/usr/local/lib/systemd/system/pkg-ContainerManager-dockerd.service
增加 [Service] 下的配置

Environment="HTTP_PROXY=http://127.0.0.1:7890"
Environment="HTTPS_PROXY=http://127.0.0.1:7890"
Environment="NO_PROXY=localhost,127.0.0.0/8,192.168.0.0/16,172.16.0.0/12,10.0.0.0/8"

留给有需要的人

另外还有个用cloudflare反代的方案,感兴趣的佬友们可以搜下坛子里的分享,适合有域名的人

1 个赞

没用过NAS,知识盲区 :clown_face:

嗯,对于限制联网的服务器的可能确实很有用(我没接触过这些公司的要求2333)

大佬我的黑裙6.X也可以用这个方法pull镜像吗?

为啥不能直接在本帖写全呢 :grin:

我是来分享软件的,感觉在这里发博客不太合适

6.x好像文件在 /usr/local/lib/systemd/system/pkg-Docker-dockerd.service
其他都一样

但你是黑裙的话,没必要用老版本啊,我就很苦恼我的正版群晖,linux内核版本太老了,又没法升

黑裙6.x的docker容器可以开V6网址,升到7我不会弄,很麻烦,