我正在按照这个链接创建我的第一个docker映像,它成功了,现在我试图从这个链接将这个映像推到我的docker存储库中。但是每当我试图将这个映像推入存储库时,我就会得到这种类型的错误。

denied: requested access to the resource is denied

注:我已成功登录docker


当前回答

所以,如果这对任何人有帮助的话… 我有同样的问题,这是我的问题和修复是什么。 我的测试网络上有一台名为“galaxy”的计算机。 我使用以下运行命令设置docker注册表:

sudo docker run -d 
--restart=always \
--name registry \
-v /srv/registry/certs:/certs \
-v /srv/registry/storage:/var/lib/registry \
-e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/galaxy.cert \
-e REGISTRY_HTTP_TLS_KEY=/certs/galaxy.key \
-p 443:443 \
registry:2

然后我试图从网络上的笔记本电脑推送图像到银河系,所以我这样做了:

docker login galaxy

这将给我一个错误,它会说:

Login did not succeed, error: Error response from daemon: 
    Get https://galaxy/v2/: x509: certificate signed by unknown authority

奇怪的是,解决这个问题的方法是这样登录:

docker login galaxy:443

这导致了一次成功的登录。 然后我试着把图片从我的笔记本电脑推到“银河”。 我已经为我的图像创建了一个标签,看起来像这样:

galaxy/myImage:0.0.1

所以我试着这样推它:

docker push galaxy/myImage:0.0.1

我得到的回答是:

The push refers to repository [docker.io/galaxy/myImage]
7ab460574f86: Preparing 
1aecaf56754d: Preparing 
1df1b5f06ca4: Preparing 
denied: requested access to the resource is denied

奇怪的是,我发现解决这个问题的方法是首先将图像标记如下:

docker tag myImage:0.0.1 galaxy:443/myImage:0.0.1

... 然后像这样推:

docker push galaxy:443/myImage:0.0.1

因此,出于某种原因,我不得不将端口作为存储库名称的必要部分包含在标记中。

希望这能帮助到其他人。

其他回答

还需要注意的重要一点是,在标记图像时,首先使用命名空间标记,然后使用存储库/ mydevrepo标记。这让我在使用Docker文档时感到困惑。之后我使用:

docker login

然后我使用“tagged name”来推送我的图像。

docker push {namespace}/mydevrepo

我很慢地添加另一个答案,但接受的答案和其余的答案提到docker登录缺少一个边缘情况,以解决其他人在评论中陈述的问题。

docker login <private-repo-host>:<port>

强调需要进入的端口可能是那些仍在寻找的解决方案。docker login或docker login <private-repo-host>可能连接没有问题,但当需要推送图像时,你会得到与OP相同的错误。

也就是说,你可以连接w/o定义主机或端口,仍然得到:

... 登录成功

在我的例子中,我使用一个自托管的GitLab内置docker-registry,它被设置为使用端口4567。验证必须从哪个端口访问注册表可能有点冒险。没有指定端口docker login <our.gitlab。主机>将成功登录,但给出了OP询问的相同问题:

... 推送指的是存储库[…] Denied:禁止访问

如果你使用docker。Io /dockerhub你可能不会遇到这个问题,但是如果你有一个自托管/私有注册表解决方案,那么你需要显式地使用docker注册表的主机和端口登录的可能性就会增加。

在Azure Devops中创建CI管道以构建docker映像并将其推送到docker Hub时,我也遇到了同样的问题。我所犯的错误是在容器存储库部分提供了错误的条目。

在buildAndPush任务中,我在容器存储库字段中给出存储库名称。实际上,存储库名称应该附加Docker Hub用户名/。 例如,您的用户名是myuser,存储库名称是test,然后提供myuser/test条目。一旦我纠正了这个问题,管道就成功地工作了,图像被推送到我的docker中心存储库

Docker中心计划对命名空间可以使用的私有存储库数量有限制。例如,免费计划将只允许您在任何时间点为一个帐户使用一个私有存储库。

如果你在计划的限制之内,那么你的努力就会成功。否则,将创建一个带有适当标记的空存储库,但图像本身不会被推送。

在我的例子中,我在推送图像之前使用web控制台将存储库创建为公共。

DR docker登录在macOS上不工作,但从应用程序的docker登录工作

当直接从终端使用时,命令docker登录成功地要求我的凭据,在我正确输入它们之后(记住没有电子邮件,只有docker ID将工作),它宣布登录成功,但任何推送请求将以拒绝告终:请求访问资源被拒绝

然而,当我从正在运行的macOs docker应用程序登录时(工具栏中的图标),它工作了。因此,docker登录和运行的docker应用程序/守护进程之间可能会有一些不一致