JFrog Artifactory 错误:将带有清单 v2 架构 1 的 Docker 映像推送到此存储库被阻止

DrT*_*eth 9 docker jfrog-container-registry

我有两个 docker 存储库在同一个 JFrog 云帐户/实例上运行。一个用于内部候选版本,另一个用于潜在的外部 GC 版本。我希望能够构建 docker 镜像并推送到内部存储库,让 QA/UAT 进城,然后将镜像复制到发布存储库。我希望从源重建图像。不幸的是,当我尝试拉取、标记然后推送图像时,出现错误:

未经授权:将带有清单 v2 架构 1 的 Docker 映像推送到此存储库被阻止。

两个存储库都阻止了模式 1 清单,但我正在向内部存储库推送良好的内容,因此我无法将相同的图像推送到发布存储库没有多大意义。

我已经设置了一个非常简单的测试来确认(实际存储库 URL 被审查):

% docker pull hello-world:latest
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
...
% docker tag hello-world:latest internal-rc.jfrog.io/hello-world:1.0.0-beta
% docker push internal-rc.jfrog.io/hello-world:1.0.0-beta
The push refers to repository [internal-rc.jfrog.io/hello-world]
9c27e219663c: Pushed
...
% docker system prune -a
...
Total reclaimed space: 131.8MB
% docker image pull internal-rc.jfrog.io/hello-world:1.0.0-beta
1.0.0-beta: Pulling from hello-world
0e03bdcc26d7: Pull complete
...
% docker image tag internal-rc.jfrog.io/hello-world:1.0.0-beta docker-release.jfrog.io/hello-world:1.0.0
% docker image push docker-release.jfrog.io/hello-world:1.0.0
The push refers to repository [docker-release.jfrog.io/hello-world]
9c27e219663c: Layer already exists
[DEPRECATION NOTICE] registry v2 schema1 support will be removed in an upcoming release. Please contact admins of the docker-release.jfrog.io registry NOW to avoid future disruption. More information at https://docs.docker.com/registry/spec/deprecated-schema-v1/
unauthorized: Pushing Docker images with manifest v2 schema 1 to this repository is blocked. For more information visit https://www.jfrog.com/confluence/display/RTF/Advanced+Topics#AdvancedTopics-DockerManifestV2Schema1Deprecation
Run Code Online (Sandbox Code Playgroud)

所以我可以将图像上传到第一个存储库,并确认它使用的是模式 2:

{
  "schemaVersion": 2,
  "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
  "config": {
    "mediaType": "application/vnd.docker.container.image.v1+json",
    "size": 7004,
    "digest": "sha256:66f750f4871ba45724699d7341ee7135caba46f63fb205351197464a66b55eff"
...
Run Code Online (Sandbox Code Playgroud)

mediaType是v1重要吗?似乎清单本身是第 2 版......但我不知道我将如何更改它,或者为什么它会被允许在一个存储库中而不是另一个存储库中。

我正在使用我相信最新版本的 docker Docker version 19.03.8, build afacb8b

有谁知道那里发生了什么?架构版本在我第一次上传和下载之间是否发生了变化?或者是在我第二次标记它或上传它时?

DrT*_*eth 14

这个问题的根源大概可以归类为用户错误。特别是我使用的用户以某种方式从发布存储库中删除了权限。一旦恢复,一切都按预期工作。

我说“可能”是因为错误消息与实际问题无关,并且花费了我 2-3 个小时的野鹅追逐时间。

所以...如果您看到此错误,请继续仔细检查权限/访问权限周围的所有其他内容,然后再尝试确定您的图像架构版本是否确实存在问题。

  • 钱币。我刚刚遇到这个问题,结果发现缺少写入权限。谢谢你帮我节省了 2-3 个小时的徒劳无功的时间。赞赏! (3认同)
  • 谢谢。这也节省了我一些时间。后来我还为此找到了[JFrog问题](https://www.jfrog.com/jira/browse/RTFACT-23722)。 (2认同)

Dee*_*Bee 8

今天我们有一个不同的案例,也有类似的错误。我在这里添加是因为这是目前谷歌的最佳结果。

将具有清单 v2 架构 1 的 Docker 映像拉取到此存储库会被阻止。

修复方法是更改​​远程存储库上的设置。

通过 UI:Artifactory 管理 -> 存储库 -> 存储库 -> 远程选项卡

然后选择您的 Docker Hub 存储库(无论您将其命名为什么),然后在“基本设置”->“Docker 设置”下,取消选中标记为的复选框

阻止拉取映像清单 v2 架构 1

之后我们的图像再次开始正常拉动。

本地存储库上有一个类似的复选框用于推送。

无论如何,我们使用 Artifactory 版本7.18.5 rev 71805900

编辑:我们的特定问题的令人惊讶的地方(可能)在这里有更详细的解释:https ://jfrog.atlassian.net/browse/RTFACT-25912

由于 Docker Hub 行为发生变化,Docker 拉取请求失败。现在 Docker Hub HTTP 响应标头以小写形式返回,例如“content-type”而不是“Content-Type”,导致 Artifactory 无法从 Docker Hub 下载和缓存 Docker 镜像。

但我们尚未测试升级是否允许我们重新启用上述复选框。