将Docker镜像转换为旧版清单格式并推送至私有镜像仓库
临时过渡方案:将Ubuntu OCI格式镜像转换为Docker旧版清单格式并推送至私有仓库
背景
自2023年2月起,Ubuntu 18.04及以上版本的官方维护镜像已切换为OCI格式清单(application/vnd.oci.image.index.v1+json),但部分遗留系统仅支持旧版Docker清单格式(application/vnd.docker.distribution.manifest.list.v2+json),导致无法拉取最新补丁镜像。以下是临时转换格式并推送至私有仓库的权宜方案,用于过渡至遗留系统完成更新。
前提
已本地拉取ubuntu:20.04镜像
步骤1:提取并修改镜像清单
- 执行命令获取当前镜像的清单并保存到本地文件:
docker manifest inspect ubuntu:20.04 > manifest.json
- 编辑
manifest.json文件,修改两处关键mediaType字段:- 顶层
mediaType:将application/vnd.oci.image.index.v1+json替换为application/vnd.docker.distribution.manifest.list.v2+json - 每个子
manifest条目里的mediaType:将application/vnd.oci.image.manifest.v1+json替换为application/vnd.docker.distribution.manifest.v2+json
- 顶层
步骤2:推送修改后的清单至私有仓库
- 给本地镜像添加私有仓库标签(替换
<私有仓库地址>为实际仓库地址,比如registry.example.com):
docker tag ubuntu:20.04 <私有仓库地址>/ubuntu:20.04-old-format
- 推送修改后的清单到私有仓库:
docker manifest push --purge <私有仓库地址>/ubuntu:20.04-old-format manifest.json
注:
--purge参数用于清理本地缓存的旧清单,确保推送的是修改后的版本
步骤3:验证转换结果
推送完成后,检查私有仓库中的清单格式是否符合要求:
docker manifest inspect <私有仓库地址>/ubuntu:20.04-old-format
确认输出的顶层mediaType为application/vnd.docker.distribution.manifest.list.v2+json,且子清单的mediaType均为application/vnd.docker.distribution.manifest.v2+json即可。
内容的提问来源于stack exchange,提问作者Chase
相关产品推荐
相关产品推荐

