JFrog工件错误:将清单v2 schema 1的Docker映像推送到此存储库被阻止

qqrboqgw  于 2023-04-05  发布在  Docker
关注(0)|答案(4)|浏览(247)

我在同一个JFrog云帐户/示例上运行了两个docker仓库。一个用于内部发布候选版本,另一个用于潜在的外部GC发布版本。我希望能够构建docker镜像并推送到内部仓库,让QA/UAT去镇上,然后将镜像复制到发布仓库。我 * 不 * 想从源代码重建镜像。不幸的是,当我尝试拉取时,标签,然后推图像,我得到一个错误:
未经授权:将带有manifest v2 schema 1的Docker图像推送到此存储库被阻止。
这两个存储库都阻止了schema 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
有人知道这是怎么回事吗?模式版本在我第一次上传和下载之间发生了变化吗?还是在我第二次标记或上传时发生了变化?

shyt4zoc

shyt4zoc1#

这个问题的根源可能可以归类为用户错误。具体来说,我使用的用户不知何故从发布库中删除了权限。一旦恢复,一切都按预期工作。
我说“可能”是因为错误信息与实际问题无关,并且花费了我2-3个小时的时间。
所以...如果你看到这个错误,在试图弄清楚你的镜像模式版本是否真的有问题之前,请继续仔细检查权限/访问周围的所有内容。

zaq34kh6

zaq34kh62#

今天我们遇到了一个不同的情况,也有类似的错误。我在这里添加,因为这是目前最热门的谷歌结果。

  • 将 * 带有manifest v2 schema 1的Docker镜像拉取到此存储库被阻止。

修复方法是更改远程存储库上的设置。
通过UI:Artifactory Admin -〉Repositories -〉Repositories -〉Remote tab
然后选择你的Docker Hub存储库,不管你给它起什么名字,然后在Basic settings -〉Docker Settings下,取消选中标签为
阻止提取映像清单v2方案1
在那之后,我们的图像又开始正确地拉动。
在本地回购协议上也有类似的复选框用于推送。
值得一提的是,我们使用的是Artifactory版本7.18.5 rev 71805900
编辑:我们的特殊问题的惊喜(可能)在这里有更详细的解释:https://www.jfrog.com/jira/browse/RTFACT-2591
Docker pull requests failed due to change in Docker Hub behavior. Now Docker Hub HTTP response header return in lower case,e.g. 'content-type' instead of 'Content-Type',causing Artifactory to failed to download and cache Docker images from Docker Hub.
但我们尚未测试升级是否允许我们重新启用上述复选框。

xriantvc

xriantvc3#

我一直得到下面的错误,而无论是从构建服务器拉或推docker图像.我有一个代理在env用于连接docker注册表.我的DNS服务器,而解析代理FQDN它是返回一个非功能IP地址.我有4 DNS服务器和多个代理服务器基于区域.一旦DNS更新和工作/功能代理返回它开始工作.只要检查网络端,它可能会解决这个问题。错误消息是误导最初我认为是docker层问题,凭证问题。。但没有网络问题。对于以下错误
提取映像配置时出错:未知blob或
[DEPRECATION NOTICE]注册表v2 schema 1支持将在即将发布的版本中删除。请立即联系docker注册表的管理员,以避免未来的中断。https://docs.docker.com/registry/spec/deprecated-schema-v1/清单中的更多信息无效:清单无效。将开始第6次尝试。

uajslkp6

uajslkp64#

我也遇到了这个错误。原来我的管道试图将一个图像推送到jFrog,而这个图像的名称已经存在于jFrog存储库中。我添加了CI_COMMIT_SHORT_SHA作为标签的后缀,这为我解决了这个问题。
在我的例子中的错误是误导性的。我确实验证了所有涉及的图像的清单版本。那是当我意识到这个错误描述可能不准确的时候。
我希望这能节省一些时间。

相关问题