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 个小时的野鹅追逐时间。
所以...如果您看到此错误,请继续仔细检查权限/访问权限周围的所有其他内容,然后再尝试确定您的图像架构版本是否确实存在问题。
今天我们有一个不同的案例,也有类似的错误。我在这里添加是因为这是目前谷歌的最佳结果。
将具有清单 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 镜像。
但我们尚未测试升级是否允许我们重新启用上述复选框。
| 归档时间: |
|
| 查看次数: |
6548 次 |
| 最近记录: |