将Docker镜像推送到新的Docker Hub账户失败

5
我需要更改我推送镜像到的Docker Hub账户。我使用docker login来更新我的.dockercfg文件,然后运行以下命令(accountimagetag是我实际值的通用占位符): 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上的私有仓库,但我已经确认我的身份验证信息是匹配的。为什么失败了?我该如何解决这个问题?
5个回答

0

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

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

docker images -a | grep <hash>

如果您可以访问私有存储库,您可以通过将您正在推送的用户添加到协作者列表中来解决此问题。但是,如果您没有访问权限,则必须为您的用户标记私有存储库,并手动应用其余更改。
希望这可以帮助您 ;)

0

我也遇到了这个问题,Bruno的评论似乎解决了它。这里是一个快速的bash注释,用于删除您的图像(假设您已经有DockerFiles和自动化来重新创建它们): docker images | awk '{print $3}' | xargs docker rmi -f


0

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

我的理论是,我最初创建的Docker镜像依赖于之前构建中存在的层,并且旧帐户可用。一旦我切换到新帐户,我就试图推送一个依赖于Docker Hub中不再存在的层的镜像,导致该层未被找到,这导致Docker Hub认为我正在尝试访问的东西必须是私有的,而实际上它只是不存在。

以上所有内容基本上都是纯猜测,因此我很高兴能够得到更多知识和/或经验的人的启示。


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

0
我在这里也遇到了同样的问题。在我的Dockerfile中,我使用了指令“FROM ubuntu:latest”。在这种情况下,我使用了旧账户构建镜像,并下载了ubuntu:latest来创建它,但是这个下载是使用我的以前的账户完成的,所以我只需从我的计算机中删除基础镜像ubuntu:latest并重新构建我的镜像。之后,我就能够推送我的镜像了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接