我需要更改我将图像推送到的Docker Hub帐户。我使用docker login
更新了我的.dockercfg
文件,然后运行了以下内容(account
,image
和tag
作为我实际值的通用占位符):< / p>
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上的私有存储库但是我已经检查过我的auth匹配了。为什么会失败,我该如何解决?
答案 0 :(得分:0)
我仍然不完全理解为什么会这样,但我想出了如何修复它。我销毁了本地计算机上的所有图像和容器并重建了图像。在我这样做后,我能够推送到新帐户。
我的理论是,我最初创建的Docker镜像依赖于以前构建中存在的图层以及旧帐户可用的图层。一旦我切换到新帐户,我试图推送依赖于Docker Hub中不再存在的图层的图像,导致找不到该图层,这导致Docker Hub认为我尝试访问的内容必须是私有的,当它实际上只是不存在时。
以上所有内容都是非常纯粹的推测,所以我很高兴能够在这方面有更多知识和/或经验的人开悟。
答案 1 :(得分:0)
我遇到了同样的问题,原因是私人父母形象。正如here所解释的那样,您的图像构建在基本图像之上,在大多数情况下是父图像。当您尝试将最新更改推送到docker hub时,您的帐户应该可以访问所有父图像,否则会导致此错误。在我的情况下,我试图推送的用户无法访问我用作基础的图像。
您可以通过哈希轻松识别私有图片。
docker images -a | grep <hash>
如果您有权访问私有存储库,则可以通过将要推送的用户添加到协作者列表来解决此问题。 但是,如果不这样做,则必须为用户标记私有存储库,并应用手动应用其余更改。
希望这会有所帮助;)
答案 2 :(得分:0)
我刚刚遇到了同样的问题。在我的例子中,我在Dockerfile中输入了指令&#34; FROM ubuntu:latest&#34;。在这种情况下,我使用我的旧帐户构建了图像,为此,我已经下载了ubuntu:latest来创建它,但是这个下载是使用我之前的帐户完成的,所以,我刚刚删除了ubuntu:latest(那是从我的电脑上使用的基本图像,并再次构建我的图像。在此之后,我能够推动我的形象。
答案 3 :(得分:0)
我也遇到了这个问题,布鲁诺的评论似乎解决了这个问题。这是一个用于删除图像的快速bash注释(假设您已经使用DockerFiles和自动化来重新创建它们): 码头图片| awk'{print $ 3}'| xargs docker rmi -f
答案 4 :(得分:0)
我正在使用最新的Docker,从ubuntu构建:在发生这种情况时可靠。 删除所有图像并没有帮助。我将父图像标记从可信任更改为较旧的可信任20150630。