本项目用于将多个上游 Docker Registry 的镜像同步到自定义的国内镜像仓库。
原始仓库来源:https://cnb.cool/1panel/image
本仓库在其基础上进行了二开与优化,加入了更灵活的配置格式与命名空间支持。
docker.io、ghcr.io 等)docker.yml 灵活配置镜像与命名空间CNB_REPO_SLUG_LOWERCASEexample/example:latest)/ 替换为 - 作为目标镜像名称,避免仓库不兼容crane 实现高效镜像复制当前支持的结构如下:
# 可选:自定义目标仓库命名空间(会自动转换为小写)
repo: Bring/Tools/MirrorRepository
# 需要同步的镜像列表
library:
docker.io:
- example/example:latest # 示例镜像,不会同步
- redis:latest
- openresty/openresty:latest
ghcr.io:
- example/example:latest # 示例镜像,不会同步
- umami-software/umami:latest
| 配置情况 | 使用的命名空间 |
|---|---|
有 repo: | 使用其内容并自动转为小写,例如:Bring/Tools/Repo → bring/tools/repo |
无 repo: | 使用环境变量 CNB_REPO_SLUG_LOWERCASE |
任何镜像以 example/ 开头都会被跳过:
example/example:latest example/placeholder:1.0
这些仅用于示例展示,不会参与同步。
需要安装:
bashyq(用于解析 YAML)crane(用于镜像复制)macOS:
brew install yq brew install go-containerregistry
Linux:
sudo wget -O /usr/local/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64
sudo chmod +x /usr/local/bin/yq
wget https://github.com/google/go-containerregistry/releases/latest/download/go-containerregistry_Linux_x86_64.tar.gz
tar -xvf go-containerregistry_Linux_x86_64.tar.gz
sudo mv crane /usr/local/bin/
必须配置目标镜像仓库:
export CNB_DOCKER_REGISTRY="registry.example.com"
export CNB_REPO_SLUG_LOWERCASE="mirror" # 当 docker.yml 未设置 repo 时生效
bash sync.sh
脚本会根据配置:
library 下的 registry 和镜像脚本主要流程:
repo 字段,确定命名空间(自动转小写)library 下的所有 registryexample/*/ 转换为 -crane copy 从源 registry 拉取镜像并推送到目标仓库本项目基于 https://cnb.cool/1panel/image 进行二次开发,调整了配置结构并增加了 repo 命名空间支持,优化了脚本逻辑与可读性。