JFrog Artifactory error: Pushing Docker images with manifest v2 schema 1 to this repository is blocked

JFrog Artifactory error: Pushing Docker images with manifest v2 schema 1 to this repository is blocked

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

unauthorized: Pushing Docker images with manifest v2 schema 1 to this repository is blocked.

两个存储库都阻止了模式 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

所以我可以将图像正常上传到第一个存储库,并确认它使用的是模式 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"
...

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

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

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

这个问题的根源可能归类为用户错误。具体来说,我正在使用的用户以某种方式从发布存储库中删除了权限。一旦恢复一切正常。

我说"probably"是因为错误信息与实际问题无关,让我白费了2-3小时的时间。

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

我在从构建服务器拉取或推送 docker 图像时遇到以下错误。我在 env 中有一个代理,用于连接 docker 注册表。我的 DNS 服务器在解析代理 FQDN 时返回了一个无法正常工作的 IP 地址。我有 4 个 DNS 服务器和多个基于区域的代理服务器。更新 DNS 并返回 working/functional 代理后,它就开始工作了。只需检查网络端,它可能会解决问题。错误消息最初具有误导性,我认为是 docker 层问题、凭据问题 .. 但没有网络问题。对于以下错误

拉取图像配置时出错:未知 blob 或

[弃用通知] registry v2 schema1 支持将在即将发布的版本中删除。请立即联系 docker 注册表的管理员,以避免将来中断。更多信息请见 https://docs.docker.com/registry/spec/deprecated-schema-v1/ 清单无效:清单无效 .将开始No.6尝试。

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

Pulling Docker images with manifest v2 schema 1 to this repository is blocked.

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

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

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

的复选框

Block pulling of image manifest v2 schema 1

之后我们的镜像又开始正常拉取了。

本地回购上有一个类似的复选框用于推送。

为了它的价值,我们使用的是 Artifactory 版本 7.18.5 rev 71805900

编辑:我们特定问题的令人惊讶之处(可能)在此处进行了更详细的解释:https://www.jfrog.com/jira/browse/RTFACT-2591

Docker pull requests fail due to a change in Docker Hub behavior. Now Docker Hub HTTP response headers return in lower case, for example, 'content-type' instead of 'Content-Type', causing Artifactory to fail to download and cache Docker images from Docker Hub.

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