巧解 Docker 镜像拉取难题:无需梯子和服务器,拉取数量无限制

在国内使用 Docker 时,常常面临无法直接访问官方镜像仓库的问题,这给学习和工作带来诸多不便。目前常见的解决方法,要么稳定性差,要么需要服务器、梯子,或者存在拉取数量限制。本文将介绍一种全新的 Docker 镜像拉取方案,该方案具有稳定性高、无经济开销、无拉取限制等优点,只需一次初始化配置,就能在任意目录通过简单命令实现镜像拉取。

现有方法分析

一、更换 Docker 源

方案描述:修改 Docker 配置文件daemon.json,添加公开镜像源后直接拉取

是否需要海外服务器:×

是否需要梯子:×

稳定性:极差(需频繁更换源)

限额:不限

二、使用公开镜像站 方案描述:使用类似docker.aityp.com/的镜像站,手动查找更换... tag 后再拉取

是否需要海外服务器:×

是否需要梯子:×

稳定性:中

限额:不限

三、配置 proxychains 代理拉取 方案描述:配置代理后,使用proxychains docker pull xxx拉取镜像

是否需要海外服务器:×

是否需要梯子:√

稳定性:高

限额:10/h

四、自建 Docker 代理服务

方案描述:使用类似 docxy 等方案,在服务器自建 Docker 代理,通过换源即可使用

是否需要海外服务器:√

是否需要梯子:×

稳定性:高

限额:10/h

现有方法各有不足:更换 Docker 源虽好用但稳定性差;公开镜像站便捷性不足,很多镜像难以找到;配置 proxychains 代理拉取需要梯子且有限额;自建代理服务则需要服务器部署,同样存在数量限制。

新方案介绍

方案原理

该方案借助 GitHub 工作流和阿里云个人镜像仓库来实现镜像拉取,整体架构如下:

  1. 将希望下载的镜像名写入 images.txt。
  2. 将变更提交到 Git 仓库。
  3. 触发 GitHub 工作流,工作流中定义了执行的脚本。
  4. 工作流自动执行同步脚本,从 Docker 官方镜像站 pull 镜像,并上传到阿里云个人镜像仓库中。
  5. 用户再从阿里云个人镜像站拉取镜像。
  6. 将拉取到的镜像重命名为目标镜像 tag。

此方案具有诸多优势:无需梯子,GitHub 和阿里云个人镜像仓库均可直接访问;无需服务器,利用 GitHub 工作流的容器环境实现镜像同步;免费,阿里云个人镜像站可免费创建,总限额 300 个,超量可删除后重新创建;无拉取限制,经测试未发现官方镜像站每小时 10 个的拉取限制;稳定性高,部署成功后可稳定使用;使用便捷,虽原理步骤看似复杂,但已通过脚本封装,配置完成后仅需类似原生命令的 docker_pull 镜像 tag 即可拉取。

方案配置

环境依赖

  • 安装 git 并配置账号密码或密钥(推荐使用密钥)。
  • 拥有阿里云账号并完成实名注册(若没有,可前往阿里云官方网站注册)。
  • 安装 Docker。

阿里云个人镜像仓库申请

  1. 开通容器镜像服务:访问cr.console.aliyun.com/cn-shanghai...
  2. 设置镜像仓库登录密码:服务开通后,点击设置 Registry 登录密码按钮,或在左侧导航栏访问凭证处设置,记住设置的密码。
  3. 创建命名空间:点击左侧导航栏命名空间,点击创建命名空间按钮,输入独特名称后确定,记住该名称。
  4. 记录登录凭证:点击左侧导航栏登录凭证,记下仓库地址。

Git 仓库配置

  1. fork 仓库:将开源仓库github.com/you8023/doc... fork 到自己的 Git 账号(若希望镜像 tag 保密,需自行创建 private 权限仓库,克隆后上传;若想分享给好友,可在设置的 Collaborators 处邀请)。
  2. 配置仓库全局变量:依次点击 Settings -> Secrets and Security -> Actions,点击 New respository secret 按钮,添加 DOCKER_USER(阿里云账户)、DOCKER_PWD(阿里云镜像仓库密码)、DOCKER_REGISTRY(仓库地址)、DOCKER_NS(命名空间名称)这 4 个全局变量。
  3. 克隆仓库:复制自己 fork 的仓库地址,使用 git clone xxx 克隆到本地。

脚本配置

  1. 复制本地仓库中的 cmd/conf.yaml.default 文件并命名为 cmd/conf.yaml。
  2. 编辑 conf.yaml,配置 registry(阿里云个人镜像仓库地址)、namespace(命名空间名称)、images_dir(Git 仓库路径)、max_retries(拉取镜像重试次数,默认为 60)、retry_delay(拉取镜像尝试间隔,秒,默认为 1)、first_delay(提交镜像 tag 后等待开始尝试拉取的时间,秒,默认为 20)。
  3. 打开终端,登录阿里云镜像仓库:docker login <阿里云个人镜像仓库地址>。
  4. 添加脚本目录到环境变量:
    • Windows 系统:右键此电脑选择属性,点击高级系统设置,点击环境变量,找到 Path 变量编辑,新建添加 cmd 目录路径。
    • Linux 系统:对 docker_pull 脚本添加执行权限,编辑~/.bashrc,添加 export PATH=$PATH:/home/dubito/git/docker_images_sync/cmd(路径替换为自己的),执行 source ~/.bashrc 使配置生效。
    • Mac 系统:参考 Linux 系统配置(目前暂未测试,欢迎反馈)。

方案使用

配置完成后,可在任意目录使用命令拉取镜像:

  • 拉取单个镜像:docker_pull mysql:8.0.1。
  • 拉取多个镜像:docker_pull mysql:8.0.1 mcp/elasticsearch:latest bitnami/redis:8.0.2-debian-12-r3。

若拉取失败,可在 GitHub 查看工作流状态和日志,以便排查问题。

相关推荐
高频因子挖掘机21 分钟前
实时行情为什么不应该逐只股票请求?批量查询与标的池管理实践
后端·github·api
程序猿DD6 小时前
OctaFuse Gateway 2.15.0:MCP 聚合、向量 Embeddings 与官方目录同步
后端·agent
余槐i8 小时前
PostgreSQL 函数索引报错 must be immutable:3种绕法与代价
数据库·后端·sql·postgresql·性能优化
需要8268 小时前
Spring Bean 生命周期:从实例化到销毁的完整钩子
java·后端·spring
凤山老林10 小时前
Spring Boot 接入国密 SM2/SM3/SM4 的一些实践记录
spring boot·后端·python
伯恩bourne11 小时前
Spring Boot Bean 注册的两种方式:@Component 家族 vs @Configuration + @Bean
java·spring boot·后端
张彦峰ZYF11 小时前
停顿短不等于延迟低:G1、ZGC 与低延迟服务的目标分野、代价账本与选型标定
后端·回收暂停、应用停止总时长·到达安全点、分配停滞·屏障吃吞吐、并发线程吃核心·并发窗口吃堆余量·分区式靠挑回收集兑现目标·染色指针式不支持压缩引用
pride.li11 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
用户72737441388412 小时前
JSON 转义字符到底该怎么读:几种常见场景
github
upala12 小时前
【仓颉语言入门 · 第二篇 第 6 课】
后端