是否可以下载远程存储库的内容并将其上传到本地存储库?

问题描述 投票:0回答:1

我有一个远程 Docker 存储库,我可以用它来拉取图像,如下所示:

docker image pull docker.mydomain.tld/alpine:latest

我尝试使用 JFrog CLI 下载此远程存储库的内容,并将它们上传到我的专用网络(无法访问互联网)中的另一个存储库。上传看起来成功,当我在 GUI 中比较存储库时,它们看起来是相同的。

但是,当我尝试从本地存储库拉取一些镜像时,操作偶尔会失败。并非所有图像都会失败,但有些图像会失败。

我通过比较从远程存储库导出的文件与从本地存储库导出的文件来调查该问题,发现了一些差异。例如:

Directory structure:
/tmp/export
├── docker-local
│   └── alpine
│       ├── latest
│       │   ├── manifest.json
│       │   ├── sha256__38a8310d387e375e0ec6fabe047a9149e8eb214073db9f461fee6251fd936a75
│       │   └── sha256__4048db5d36726e313ab8f7ffccf2362a34cba69e4cdd49119713483a68641fce
│       └── _uploads
│           └── manifest-sha256__fa7042902b0e812e73bbee26a6918a6138ccf6d7ecf1746e1488c0bd76cf1f34.json
└── docker-remote
    └── library
        └── alpine
            ├── latest
            │   └── list.manifest.json
            └── sha256__2c43f33bd1502ec7818bce9eea60e062d04eeadc4aa31cad9dabecb1e48b647b
                ├── manifest.json
                ├── sha256__38a8310d387e375e0ec6fabe047a9149e8eb214073db9f461fee6251fd936a75
                └── sha256__4048db5d36726e313ab8f7ffccf2362a34cba69e4cdd49119713483a68641fce

此外,我注意到

manifest.json
文件的内容有所不同。例如:

  • 在远程仓库导出中,

    mediaType
    字段为:
    "mediaType": "application/vnd.oci.image.manifest.v1+json"

  • 本地仓库导出中,

    mediaType
    字段为:
    "mediaType": "application/vnd.docker.distribution.manifest.v2+json"

我的问题

什么可能导致这些差异,以及为什么某些图像无法从本地存储库下载?是否需要特定的流程或工具来确保存储库之间图像的一致和功能传输?

任何见解或建议将不胜感激!

artifactory docker-registry jfrog
1个回答
0
投票

您的问题是您没有拉动和推送相同的数据。

当您拉取多架构镜像(例如Alpine)时,Docker 会下载一个manifest-list.json。该文件包含对该映像的所有可用架构的引用。但是,您的本地 Docker 设置仅下载其所需的特定架构(例如 amd64 或 arm64)。

当您从 PC 推送映像时,只会推送您拉取的特定架构,而不是整个多架构清单列表。这就是为什么你只能在本地看到manifest.json,而不是manifest-list.json。

如果您的目标是将完整的多架构映像复制到私有实例,则您错误地拉取了映像。通过使用 Docker 拉取,您只需下载特定的架构,而 Alpine(作为示例)包含八种架构。

要解决这个问题,您应该使用像 regctl 这样的工具从 Docker Hub 中提取镜像。 regctl 将下载所有架构,确保为您的私有实例保留完整的多架构映像。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.