本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com

regbot 是一款基于 Lua 的脚本工具,专为 OCI 兼容的容器注册表设计。它允许用户通过 Lua 脚本自动化容器镜像的管理操作,如镜像同步、标签清理、版本筛选等,适用于私有注册表维护、跨注册表镜像同步及自动化运维场景。
scratch(轻量,无额外依赖)和 alpine(含 AWS/GCP 凭据助手)的镜像标签。| 标签格式 | 说明 |
|---|---|
regclient/regbot:latest | 最新稳定版,基于 scratch 基础镜像(无 shell 或凭据助手)。 |
regclient/regbot:alpine | 最新稳定版,基于 alpine 基础镜像(含 AWS/GCP 凭据助手)。 |
regclient/regbot:edge | 开发版(main 分支最新提交),基于 scratch。 |
regclient/regbot:edge-alpine | 开发版,基于 alpine。 |
regclient/regbot:$ver | 特定稳定版(如 v0.7.1),基于 scratch;同时标签化主版本(v0)和次版本(v0.7)。 |
regclient/regbot:$ver-alpine | 特定稳定版,基于 alpine。 |
注意:
scratch基础镜像不含 shell 及凭据助手,仅包含 regbot 可执行文件;alpine基础镜像基于发布时的最新 Alpine 版本,预安装 AWS 和 Google Cloud 凭据助手。
若需测试 regbot 功能,可先部署一个本地 OCI 注册表(以 Docker Registry 2 为例):
# 创建专用网络 docker network create registry # 启动注册表容器(支持删除操作,禁用验证) docker run -d --restart=unless-stopped --name registry --net registry \ -e "REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/var/lib/registry" \ -e "REGISTRY_STORAGE_DELETE_ENABLED=true" \ -e "REGISTRY_VALIDATION_DISABLED=true" \ -v "registry-data:/var/lib/registry" \ -p "127.0.0.1:5000:5000" \ registry:2
注册表数据存储在
registry-data卷中,端口映射至本地5000端口,仅允许本地访问。
regbot 通过 YAML 配置文件定义凭据、默认参数及脚本逻辑。核心配置文件为 regbot.yml,结构如下:
version: 1 # 配置文件版本(当前仅支持 1) creds: # 注册表凭据配置(可配置多个) - registry: registry:5000 # 注册表地址 tls: disabled # TLS 配置(enabled/disabled) scheme: http # 协议(http/https) - registry: docker.io # Docker Hub 注册表 user: "{{env \"HUB_USER\"}}" # 从环境变量读取用户名 pass: "{{file \"/var/run/secrets/hub_token\"}}" # 从文件读取密码/令牌 defaults: # 全局默认参数(可被脚本级参数覆盖) parallel: 2 # 并行任务数 interval: 60m # 脚本执行间隔(定时模式) timeout: 600s # 脚本超时时间 scripts: # 脚本列表(按顺序执行) - name: 镜像同步示例 # 脚本名称 timeout: 59m # 脚本级超时(覆盖默认) script: | # Lua 脚本内容 # 镜像同步逻辑(详见下文示例)
creds:定义访问各注册表的凭据,支持字段:
registry:注册表域名或地址(如 docker.io、registry:5000)。tls:是否启用 TLS(enabled 或 disabled)。scheme:协议(http 或 https)。user:登录用户名(支持 {{env "VAR"}} 从环境变量读取,{{file "path"}} 从文件读取)。pass:登录密码/令牌(同 user 支持动态读取)。defaults:全局默认参数,作用于所有脚本(脚本级配置可覆盖):
parallel:并行执行的任务数(如同时同步多个镜像)。interval:定时模式下的脚本执行间隔(如 30m、1h)。timeout:脚本执行超时时间(如 600s)。scripts:脚本列表,每个脚本包含:
name:脚本名称(标识用途)。timeout:脚本超时时间(覆盖 defaults.timeout)。script:Lua 脚本内容,实现具体逻辑(如镜像复制、标签删除)。以下为包含镜像同步、旧标签清理的完整配置示例:
version: 1 creds: - registry: registry:5000 # 本地注册表(上文部署的 registry:2) tls: disabled scheme: http - registry: docker.io # Docker Hub user: "{{env \"HUB_USER\"}}" # 从环境变量 HUB_USER 获取用户名 pass: "{{file \"/var/run/secrets/hub_token\"}}" # 从挂载文件获取密码 defaults: parallel: 2 interval: 60m timeout: 600s scripts: - name: 同步最新 minor 版本镜像 timeout: 59m script: | imageList = {"library/alpine", "library/debian"} # 待同步镜像列表 localReg = "registry:5000" # 目标本地注册表 tagExp = "^%d+%.%d+$" # 匹配 minor 版本标签(如 3.18、12.4) maxKeep = 3 # 保留最新 3 个版本 # Lua 脚本逻辑:筛选上游标签 → 排序 → 复制至本地注册表 for k, imageName in ipairs(imageList) do upstreamRef = reference.new(imageName) # 上游镜像引用 localRef = reference.new(localReg .. "/" .. imageName) # 本地镜像引用 tags = tag.ls(upstreamRef) # 获取上游镜像标签列表 matchTags = {} for _, t in pairs(tags) do if string.match(t, tagExp) then # 筛选符合规则的标签 table.insert(matchTags, t) end end table.sort(matchTags) # 排序标签 if #matchTags > maxKeep then matchTags = {unpack(matchTags, #matchTags - maxKeep + 1)} # 保留最新 3 个 end for _, t in ipairs(matchTags) do upstreamRef:tag(t) # 设置上游标签 localRef:tag(t) # 设置本地标签 image.copy(upstreamRef, localRef) # 复制镜像 end end - name: 清理旧 CI 镜像 script: | imageName = "registry:5000/regclient/example" # 本地示例镜像 tagExp = "^ci%-%d+$" # 匹配 CI 标签(如 ci-001) maxDays = 30 # 保留 30 天内的镜像 imageLabel = "org.opencontainers.image.created" # 创建时间标签 # 计算过期时间阈值 timeRef = os.time() - (86400*maxDays) cutoff = os.date("!%Y-%m-%dT%H:%M:%SZ", timeRef) ref = reference.new(imageName) tags = tag.ls(ref) # 获取本地镜像标签 for _, t in pairs(tags) do if string.match(t, tagExp) then ref:tag(t) ic = image.config(ref) # 获取镜像配置 if ic.Config.Labels[imageLabel] < cutoff then # 检查创建时间 tag.delete(ref) # 删除过期标签 end end end
regctl 是 regclient 工具集的一部分,用于与注册表交互(如查看标签、复制镜像)。可通过 Docker 快速部署:
cat >regctl <<EOF #!/bin/sh docker container run -it --rm --net host \ -u "\$(id -u):\$(id -g)" -e HOME -v \$HOME:\$HOME \ -v /etc/docker/certs.d:/etc/docker/certs.d:ro \ regclient/regctl:latest "\$@" EOF chmod 755 regctl # 配置本地注册表(registry:5000)支持 HTTP ./regctl registry set --scheme http --tls disabled localhost:5000
为测试清理逻辑,可向本地注册表推送示例镜像:
# 复制 regctl 镜像至本地注册表 ./regctl image copy regclient/regctl:v0.0.1 localhost:5000/regclient/example:latest && \ # 创建多个 CI 标签镜像(模拟历史构建) ./regctl image copy localhost:5000/regclient/example:latest localhost:5000/regclient/example:ci-001 && \ ./regctl image copy localhost:5000/regclient/example:latest localhost:5000/regclient/example:ci-002 && \ ./regctl image copy localhost:5000/regclient/example:latest localhost:5000/regclient/example:ci-003
regbot 支持三种运行模式:干运行(测试逻辑)、立即执行(单次运行)、定时任务(周期性执行)。
验证脚本逻辑,不执行实际镜像操作:
export HUB_USER="你的 Docker Hub 用户名" echo "你的 Docker Hub 密码或 PAT" > hub_token # 创建密码文件 docker run -it --rm --net registry \ -e "HUB_USER" \ -v "$(pwd)/hub_token:/var/run/secrets/hub_token:ro" \ -v "$(pwd)/regbot.yml:/home/appuser/regbot.yml" \ regclient/regbot:latest -c /home/appuser/regbot.yml once --dry-run
输出将显示脚本计划执行的操作(如“复制镜像 library/alpine:3.18 至 registry:5000”),但不会实际执行。
执行脚本并实际操作镜像(需确保凭据正确):
docker run -it --rm --net registry \ -e "HUB_USER" \ -v "$(pwd)/hub_token:/var/run/secrets/hub_token:ro" \ -v "$(pwd)/regbot.yml:/home/appuser/regbot.yml" \ regclient/regbot:latest -c /home/appuser/regbot.yml once
以守护进程模式运行,按 defaults.interval 周期性执行脚本:
docker run -d --restart=unless-stopped --name regbot --net registry \ -e "HUB_USER" \ -v "$(pwd)/hub_token:/var/run/secrets/hub_token:ro" \ -v "$(pwd)/regbot.yml:/home/appuser/regbot.yml" \ regclient/regbot:latest -c /home/appuser/regbot.yml server -v debug
日志级别通过
-v debug设置(可选:info/warn/error),容器重启策略为unless-stopped(异常退出后自动重启)。
使用 regctl 检查镜像同步及清理效果:
# 查看本地注册表镜像列表 ./regctl repo ls localhost:5000 # 查看指定镜像标签(如同步的 alpine 镜像) ./regctl tag ls localhost:5000/library/alpine # 查看清理后的 CI 镜像标签(应保留最新 3 个) ./regctl tag ls localhost:5000/regclient/example
创建 docker-compose.yml,简化 regbot 部署:
version: "3.8" services: regbot: image: regclient/regbot:latest container_name: regbot restart: unless-stopped networks: - registry environment: - HUB_USER=你的 Docker Hub 用户名 volumes: - ./regbot.yml:/home/appuser/regbot.yml:ro - ./hub_token:/var/run/secrets/hub_token:ro command: -c /home/appuser/regbot.yml server -v info networks: registry: external: true # 使用前文创建的 registry 网络
启动服务:
docker-compose up -d
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429