拒绝访问:请求访问资源被拒绝:docker。

805

我正在遵循此链接创建我的第一个Docker镜像,它成功了,现在我正在尝试从此链接将此镜像推送到我的Docker仓库。但是每当我尝试将此镜像推送到仓库时,就会出现这种类型的错误。

denied: requested access to the resource is denied

注意:我已成功登录 Docker。


1
确保您不会犯这个错误:https://dev59.com/niX-s4cB2Jgan1znszAf#59626146 - Jithin Pavithran
4
请务必确认您的电子邮件。如果您在想谁会做这样愚蠢的事情,那么我在推送之前没有确认我的电子邮件。 - Luv33preet
6
这个对我有用。 https://dev59.com/mFoV5IYBdhLWcg3wIbxT#42300879 - abitcode
检查是否需要使用 sudo - Sisir
69个回答

3
对于其他已经登录的用户遇到类似问题的情况,只需确保重命名您的标签: docker tag whatEverNameForImage:tag YourUserName/whatEverNameForImage:tag 然后推送最新版本。
docker push YourUserName/whatEverNameForImage:tag

1
这个问题已经有超过60个答案了。你的答案似乎和昨天的这个答案完全一样。那么,为什么还值得添加呢? - Quentin

2

我有些迟缓,才回答这个问题,但是已经被接受的答案和其他提到docker login的答案都遗漏了一个边缘情况,无法解决其他人在评论中所述的问题。

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

注重输入端口号可能是仍在寻找解决方案的人的解决方法。当使用docker logindocker login <private-repo-host>时,可能可以顺利连接,但当推送镜像时,您将会遇到与OP相同的错误。
也就是说,您可以连接而不定义主机或端口,仍然会得到以下结果:
...
登录成功
在我的情况下,我正在使用自托管的GitLab内置Docker注册表,该注册表设置为使用端口4567。验证注册表必须从哪个端口访问可能是有优势的。如果不指定该端口,docker login <our.gitlab.host>将成功登录,但会出现与OP所询问的相同问题:
...
拒绝访问:禁止访问
如果您正在使用docker.io/dockerhub,则很可能不会遇到此问题,但如果您使用自托管/私有注册表解决方案,则需要使用docker注册表的主机和端口显式登录的概率会增加。

谢谢,非常有帮助! - Alfabravo

2
最简单的方法是使用 Docker Desktop(适用于 Windows 10 或以上版本和 Mac)。
首先,通过提供 Docker ID 注册 Docker Hub。
然后,在您的计算机上单击 Docker Desktop 图标,进入“偏好设置”,并使用 Docker Hub 的 Docker ID 和密码登录。

enter image description here


2
在我的情况下,我正在向一个具有对存储库具有管理员权限的团队所在的组织进行推送。
因此,我的推送命令是: docker push org-name/image-name 我可以成功地将其推送到username/image-name,但无法推送到该组织。我三次检查了权限。没有任何作用。
解决方案是从docker hub中删除repo,并使用以下命令重新推送: docker push org-name/image-name 值得一提的是,我认为在将帐户转换为组织之前,该repo最初是被推送的。

2
步骤1:更改docker账户的隐私模式。
请访问https://hub.docker.com/settings/default-privacy,并参照下图操作: enter image description here 步骤2:执行以下命令(请参考下图): enter image description here 命令如下:
  • docker images
  • docker tag <<TAG_ID>> <<USER_NAME>>/<<IMAGE_NAME>>:latest
  • docker login docker.io
  • docker push <<USER_NAME>>/<<IMAGE_NAME>>:latest
输出结果如下: enter image description here

2
我也遇到了这个错误信息,使用Gitlab注册表。不同之处在于,我试图更改来自先前构建的映像的名称。问题在于,由于新映像的名称与我的组中的任何项目都不匹配,因此被推送的映像的注册表不存在。
简而言之,在Gitlab中,映像名称必须与项目名称相匹配。

2

我也遇到了这个问题。原来我正在使用免费版并尝试将超过1个图像推送到私有存储库中。将一个图像设为私有,其余的设为公共的对我有用。


2

我曾经在Azure管道中遇到了类似的问题。我忘记在存储库部分添加docker-id。

在Azure中,如果只使用名称(例如<repo-name>)进行推送可能无法正常工作。需要使用完全限定的存储库名称,其中也包括docker-id。

请使用:

repository: '<docker-id>/<repo-name>'

替代

repository: '<repo-name>'

管道片段:
- task: Docker@2
  inputs:
    containerRegistry: 'service-connection-name'
    repository: '<docker-id>/<repo-name>'

2
我很希望能帮助那些像我一样首先查看最终答案的人:
我不断尝试输入
docker push user/repo/tag

相反地

docker push user/repo:tag

因为我也将我的标签制作成这样:

docker tag image user/repo/tag

一切都变得一团糟。

我真诚地希望你不要重复我的错误。我在这上面浪费了大约30分钟...


2
docker logout
docker login
(enter username and password)
docker login
 docker tag {imageName} {dockerUserId}/{imageName}
docker push  {dockerUserId}/{imageName}

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