5

我需要更改将图像推送到的 Docker Hub 帐户。我曾经docker login更新我的.dockercfg文件,然后运行以下命令(account, image,并tag充当我的实际值的通用占位符):

docker push account/image:tag

我立即收到以下错误:

The push refers to a repository [account/image] (len: 1)
Sending image list
2014/12/11 21:26:59 Error: Status 400 trying to push repository repo/image:
"Access denied: <hash> is a private image" docker push account/image:tag
returned exit code 1action docker push repo/image:tag failed

我正在尝试推送到 docker hub 上的私有存储库,但我已经仔细检查了我的身份验证是否匹配。为什么会失败,我该如何解决?

4

5 回答 5

0

我遇到了同样的问题,原因原来是私有父图像。正如这里所解释,您的图像构建在基础图像之上,在大多数情况下是父图像。当您尝试将最新更改推送到 docker hub 时,您的帐户应该可以访问所有父图像,否则会导致此错误。在我的情况下,我尝试推送的用户无权访问我用作基础的图像。

您可以通过其哈希轻松识别私有图像。

docker images -a | grep <hash>

如果您有权访问私有存储库,则可以通过将要推送的用户添加到协作者列表来解决此问题。但是,如果您不这样做,则必须为您的用户标记私有存储库并手动应用其余更改。

希望这可以帮助 ;)

于 2015-02-08T12:27:54.657 回答
0

我仍然不完全理解为什么会发生这种情况,但我想出了如何解决它。我销毁了本地机器上的所有图像和容器并重建了图像。在我这样做之后,我能够推送到新帐户。

我的理论是,我最初创建的 Docker 映像依赖于以前构建中存在的层,并且旧帐户可用。切换到新帐户后,我试图推送依赖于 Docker Hub 中不再存在的层的图像,导致找不到该层,这导致 Docker Hub 认为我试图访问的东西必须是私有的,当它实际上不存在时。

以上所有内容几乎都是纯粹的猜想,所以我很高兴能得到在该领域有更多知识和/或经验的人的启发。

于 2014-12-12T19:16:45.050 回答
0

我刚刚在这里遇到了同样的问题。就我而言,我的 Dockerfile 中有指令“FROM ubuntu:latest”。在这种情况下,我使用我的旧帐户构建了映像,为此,我下载了 ubuntu:latest 来创建它,但是这个下载是使用我以前的帐户完成的,所以,我只是删除了 ubuntu:latest(那是使用的基本图像)从我的计算机中重新构建我的图像。在此之后,我能够推送我的图像。

于 2015-03-12T13:26:48.250 回答
0

我也遇到了这个问题,布鲁诺的评论似乎解决了这个问题。这是删除图像的快速 bash 注释(假设您有 DockerFiles 和自动化来重新创建它们):awk '{打印 $3}' | xargs 码头工人 rmi -f

于 2015-05-15T18:38:12.480 回答
0

发生这种情况时,我正在使用最新的 Docker,从 ubuntu:trusty 构建。删除所有图像没有帮助。我将父图像标签从 trusty 更改为较旧的 trusty-20150630。

于 2015-08-05T02:45:47.173 回答