You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何保留摘要将Docker镜像重新发布至其他镜像仓库

如何将带摘要(digest)的Docker镜像原样推送到私有仓库

Docker CLI本身不支持直接推送image@digest格式的镜像(会报错cannot push a digest reference),但可以通过以下两种方式实现保留原镜像摘要、无额外抽象层的镜像迁移:

方法一:使用skopeo工具(推荐)

skopeo是专门用于跨容器仓库复制镜像的工具,无需将镜像拉取到本地即可直接复制,且能完整保留原镜像的摘要和所有元数据。

步骤1:安装skopeo

  • Ubuntu/Debian:
    sudo apt-get update && sudo apt-get install skopeo
    
  • CentOS/RHEL:
    sudo yum install skopeo
    
  • macOS(Homebrew):
    brew install skopeo
    

步骤2:直接跨仓库复制镜像

使用skopeo copy命令,指定源镜像和目标镜像的完整digest地址:

# 直接从公共仓库复制到私有仓库(支持登录验证)
skopeo copy \
  --src-creds "公共仓库用户名:密码" \
  --dest-creds "私有仓库用户名:密码" \
  docker://docker.io/alpine@sha256:c0d488a800e4127c334ad20d61d7bc21b4097540327217dfab52262adc02380c \
  docker://registry.io/alpine@sha256:c0d488a800e4127c334ad20d61d7bc21b4097540327217dfab52262adc02380c

如果无需验证公共仓库(比如拉取公开镜像),可以去掉--src-creds参数。

验证

复制完成后,从私有仓库拉取镜像并检查摘要:

docker pull registry.io/alpine@sha256:c0d488a800e4127c334ad20d61d7bc21b4097540327217dfab52262adc02380c
docker inspect registry.io/alpine@sha256:c0d488a800e4127c334ad20d61d7bc21b4097540327217dfab52262adc02380c | grep -i digest

输出的摘要会和原公共镜像完全一致。

方法二:使用Docker CLI(需启用实验性功能)

如果依赖Docker CLI,可以通过推送镜像manifest的方式实现,但需要启用Docker的实验性功能:

步骤1:启用实验性功能

编辑~/.docker/config.json文件,添加"experimental": "enabled":

{
  "experimental": "enabled",
  ...其他配置
}

重启Docker服务生效。

步骤2:拉取原镜像并推送manifest

# 拉取带digest的镜像
docker pull docker.io/alpine@sha256:c0d488a800e4127c334ad20d61d7bc21b4097540327217dfab52262adc02380c

# 推送镜像manifest到私有仓库
docker manifest push registry.io/alpine@sha256:c0d488a800e4127c334ad20d61d7bc21b4097540327217dfab52262adc02380c

这种方式同样能保留原镜像的摘要,但实验性功能可能存在兼容性问题,不建议在生产环境中依赖。


内容的提问来源于stack exchange,提问作者Dbercules

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 02:40:38