远端镜像订阅
按区域订阅镜像目录,并保留本地选择。
订阅 JSON 镜像目录,按区域选择镜像站并保存到本地配置文件。
oci-mirror-proxy init
oci-mirror-proxy remote update --region cn
oci-mirror-proxy remote list
oci-mirror-proxy remote update --url https://example.com/mirrors.json --region cn,apac
oci-mirror-proxy remote update --all --dry-run
oci-mirror-proxy remote update --all
oci-mirror-proxy remote remove --url https://example.com/mirrors.jsonupdate 同时负责首次添加。不传 --url、--all 时使用仓库默认地址:
https://git.zmide.com/bin/oci-mirror-proxy/raw/branch/master/subscriptions/mirrors.json首次更新需要 --region;之后省略时沿用该源的区域,再次指定时替换。
多个区域取并集,一个站点可以声明多个区域。标签没有隐含层级,global
不自动包含在其他区域内。--all 更新已经配置的源,保留各源独立的区域选择,
与 --url、--region 互斥。
list/update/remove 支持 --config。更新、删除支持 --dry-run、--no-reload 和
--admin-socket。预览只显示变更,不保存文件。筛选结果为空时默认拒绝,
需要显式指定 update --allow-empty。remove 必须指定 --url。
不提供后台自动更新任务。
查看远端目录
remote list 列出本地已配置的订阅源。要查看远端有哪些镜像站,无须先订阅,
可直接下载目录查看:
oci-mirror-proxy remote show
oci-mirror-proxy remote show --url https://example.com/mirrors.json
oci-mirror-proxy remote show --url https://example.com/mirrors.json --region cn,apac省略 --url 时使用内置默认订阅。每个镜像端点一行,显示站点名称、完整区域标签、
Registry、端点 URL 和官网;没有官网时显示 -,官网查询参数会隐藏。
站点和端点保留目录原有顺序,不合并不同站点声明的相同端点。
省略 --region 或传空字符串时显示全部站点;多个区域取并集,匹配的站点展示其全部端点。
区域不存在时返回错误并列出可用标签。空目录或筛选后无结果时显示
no matching mirrors,正常退出。
show 仅接受 --url、--region 和帮助参数,不依赖本地配置或运行中的代理,
不创建配置文件、不触发重载。输出只代表远端目录内容,不代表本地启用状态或站点健康状态,
也不会访问镜像端点或官网。下载限制和目录校验规则与更新命令相同。
文件、原子更新与备份
主配置为 /etc/oci-mirror-proxy/config.yaml 时,每个源独立保存为:
config.d/example.com@0123456789abcdef.yaml
config.d/example.com@0123456789abcdef.yaml.bak每个源使用独立文件,即使两个 URL 的主机名相同。请保留文件头中的来源 URL 和区域注释,以便 CLI 识别订阅。
若 URL 含私有查询令牌,应保护配置目录;CLI 显示时隐藏查询参数,
生成文件和备份权限为 0600。
更新会与其他配置一起验证,并采用原子写入;上一版文件备份为 .yaml.bak。
备份失败则不更新当前文件。
首次创建没有上一版备份;内容不变时不改写当前文件和备份。删除源前也备份。
.bak 不参与配置加载。需要恢复时,手动把 .bak 复制回原 .yaml 路径后执行 reload。
使用 --all 时,某个源失败不会回滚其他成功更新的源,
只要有失败就返回退出码 1,最后统一尝试重载。代理未运行时文件留待下次启动生效。
若文件已更新但重载被拒绝或超时,CLI 明确报告“文件已保存、运行配置未确认”,返回 1,
已保存的文件会保留,可执行 oci-mirror-proxy reload 或再次更新来重试重载。
重载不打断已有 HTTP 传输,也不改变其续传候选。同一次 docker pull
中重载后新发起的 HTTP 请求使用新配置。
本地选择
最终上游在每个 registry 内按规范化 URL 合并去重。 删除一个源后,其他文件仍提供的 URL 继续存在,详见配置合并。
oci-mirror-proxy upstream disable --url https://docker.example.com
oci-mirror-proxy upstream enable --url https://docker.example.com启用、禁用写入最后加载的 config.d/local-overrides.yaml,只覆盖实际存在的 URL,
因此既能跨订阅更新保留选择,也不会在最后一个源被删除后重新引入旧 URL。
自定义超时、认证、TLS 等也可放入该文件。不要直接修改生成字段,下一次更新会替换。
upstream remove --url 删除当前各处的定义,但下次订阅更新可能恢复;
持久阻止某个 URL 应使用禁用。
JSON 格式与信任边界
格式以仓库的 mirrors.json 和
schema.json 为准。镜像站包含展示名称、多个区域、
以及明确的 registry/URL,不需要镜像站 ID。拒绝未知字段、重复 JSON 键、
错误版本、未知区域和非法地址。生成上游使用无凭据的 auth: {type: token},
兼容匿名 Bearer 质询。
下载超时 30 秒、解压后正文上限 4 MiB、限制重定向次数;正常验证 HTTPS 证书, 拒绝 HTTPS 降级跳转。显式 HTTP 源会警告,支持标准代理环境变量。 订阅不能下发凭据、本地路径、TLS 绕过或全局代理设置。
订阅是信任入口:摘要校验不能证明可变 tag 的解析结果真实或新鲜。 区域不代表可用性承诺,使用前应查看镜像目录说明、 运营方限制,并检查本地网络的可达性。
订阅的列表、更新和移除需要服务运行,通过管理 API 读写服务的 config.d 目录中的配置文件。自定义端点使用 --admin-socket。文件保存与生效分开,reload 失败时保留原运行配置,修复配置文件后可重试。