拒绝访问:请求访问资源被拒绝: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个回答

1247

在进行docker push之前,您可能需要将docker仓库切换为私有状态。

感谢Dean Wu提供的答案ses这条评论,在推送之前,请记得注销,然后从命令行登录到您的Docker Hub帐户。

# you may need log out first `docker logout` ref. https://dev59.com/_lgQ5IYBdhLWcg3w7ofY#53835882
docker login
根据 文档
You need to include the namespace for Docker Hub to associate it with your account.
The namespace is the same as your Docker Hub account name.
You need to rename the image to YOUR_DOCKERHUB_NAME/docker-whale.

所以这意味着您必须在推送之前为图像进行标记

docker tag firstimage YOUR_DOCKERHUB_NAME/firstimage

然后,你就应该能够推它了。

docker push YOUR_DOCKERHUB_NAME/firstimage

71
不是我的问题。我已经尝试了所有的 [host]/[namespace]/[repo] 组合,仍然出现相同的错误(也就是说,我的组织和我的账户都作为命名空间)。甚至尝试了 docker login ...,但我还是无法推送 :-| - nicerobot
1
嗨,我按照你的指令操作,遇到了一个错误——守护程序的错误响应:找不到镜像:ubuntu-nodejs:latest - Yash
66
这个答案不应该被标记为已接受!提供的解决方案明显不起作用,正如其他人所指出的那样。 - SamDevx
9
我曾遇到同样的问题,结果发现我没有正确登录。 "docker login" 的行为很奇怪,即使我输入了错误的密码,它也显示“登录成功”。因此,为了正确登录,我使用了"docker login <url> --username=<username>"命令。之后,"docker push"就按预期工作了。 - Devesh Chanchlani
4
这个答案不完整,对我没有用。Venu S 提供了一个完整的答案,解决了我的问题。 - rm.rf.etc
显示剩余16条评论

296
我遇到了同样的问题,但是这里给出的答案对我没有起作用。 我尝试了几个步骤,最终成功地解决了它。
以下是对我有效的步骤:
1. 登录到Docker。 `docker login -u darlin`
2. 给你的镜像打上标签。
我的镜像名称是`mylocalimage`,默认标签为`latest`。 我的用户名是`darlin`,在Docker Cloud注册,并创建了一个名为`dockerhub`的公共仓库。
所以,我的个人仓库现在变成了`darlin/dockerhub`, 我想要推送带有标签`myfirstimagepush`的镜像。
我进行了如下标记:
docker tag mylocalimage:latest darlin/dockerhub:myfirstimagepush

将图像推送到我的个人 Docker 仓库,命令如下: ``` docker push darlin/dockerhub:myfirstimagepush ```
它已成功推送到我的个人 Docker 仓库。

11
这个答案解决了我的问题。这应该是被采纳的答案。其他的答案不完整,对我没有用。例如,其他的答案没有提到 docker login。在来到这个帖子之前,我不知道 docker login - rm.rf.etc
通常情况下,您应该在所有命令前使用sudo前缀。参考http://www.projectatomic.io/blog/2015/08/why-we-dont-let-non-root-users-run-docker-in-centos-fedora-or-rhel/。 - wmitchell
6
这是小狗。 - Dave Hodgkinson
6
好的,这个回答解决了我的问题。请将此转发给任何想解决此问题的人。 - Maha Lak
我建议的一个改变是使用常见的名字,比如“约翰”、“鲍勃”或“爱丽丝”,而不是复杂的名字。但回答很好! - Savannah Madison
显示剩余6条评论

245

我在学习 Docker 初学者课程时遇到了同样的问题。通过在执行 docker push 命令前运行 docker login 命令,我成功解决了这个问题。


18
就我所知,我在运行docker login时遇到了“获取凭证错误”的问题。使用sudo docker login解决了这个问题,并使我能够推送我的私有库。 - johnsampson
2
显然,Docker网络研讨会已经过时了。 - Luís de Sousa
sudo的注意事项 - 请查看我的回答 - rhoerbe
我执行了 docker login 并使用 docker tag ubuntu franva/ubuntu 为本地镜像打标签,然后运行了 docker push franva/ubuntu - Franva
如果以root身份运行,则必须使用ASL日志记录(需要CGO) 保存凭据时出错:错误存储凭据 - 错误:退出状态1,输出:` - Namwanza Ronald
就我所知,在我的共享开发服务器上,root用户登录的账户与其他人不同,因此 sudo docker push 将尝试推送到另一个用户的账户。运行 docker push 将会使用“我的” Docker Hub 账户。 - Philipp

72

使用以下命令:

$ docker login
<enter user name and password for Docker Hub Repository>

$ docker tag first-image {docker-hub-username}/{default-repo-folder-name}:first-image

$ docker push {docker-hub-username}/{default-repo-folder-name}:first-image

例如,我有一个名为manjeet86/docker-repo的公共存储库,因此命令将是:

e.g.像manjeet86/docker-repo这样的公共存储库,命令将是:

(Note: The original sentence seems to be incomplete, so I provided two possible translations.)
$ docker tag first-image manjeet86/docker-repo:first-image

$ docker push manjeet86/docker-repo:first-image

只需要看到:而不是/,这就是诀窍。 这对我有效。 我不知道是否可以使用/代替:来标记,但这可能是出于其他目的。

https://docs.docker.com/engine/reference/commandline/tag/#examples


5
这是对我有效的方法,使用冒号 : 代替斜杠 /,谢谢。 - Kris
此线程中问题的可能解释: https://github.com/moby/moby/issues/31760#issuecomment-309812486 - gp.
这是唯一解决我的答案。 - KenobiBastila

56

需要注意的是,当您为图像打标签时,您需要使用命名空间和您的存储库/mydevrepo进行标记。 当我按照Docker文档进行操作时,这使我感到困惑。之后我使用了:

docker login

然后我使用'标记名称'推送了我的图像。

docker push {namespace}/mydevrepo

2
换句话说,做类似于{namespace}/wordpress-cli-ansible这样的事情,而不是{namespace}/wordpress-helm/wordpress-cli-ansible。这就是我遇到的一个问题,阻止了我进行推送。 - vhs

27

以下是一个2018年1月的解决方法:

  1. 访问 hub.docker.com 并将您的存储库更改为私有。

  2. 在shell中运行:

    docker images

    REPOSITORY TAG IMAGE ID CREATED SIZE verse_gapminder_gsl latest 023ab91c6291 3 minutes ago 1.975 GB verse_gapminder latest bb38976d03cf 13 minutes ago 1.955 GB rocker/verse latest 0168d115f220 3 days ago 1.954 GB

    docker tag bb38976d03cf dockhubusername/verse_gapminder:mytag

    docker login docker.io

    docker push dockhubusername/verse_gapminder:mytag

  3. 回到docker hub并将存储库更改回公共模式。


没有使用上面的特定登录命令,当我通过命令行登录时,推送时仍然出现访问错误。 - Vandana Chadha
首先登录,然后使用以下命令,它一定会起作用:$ docker image tag nginx my-user-name/nginx
$ docker image push my-user-name/nginx:latest
- subhashis

22

我也遇到了这个问题,我尝试了这里提供的解决方案,但都没有奏效。至少根据docker login输出的结果,我已经成功登录了,但仍然无法推送映像。最终起作用的是:

docker logout

然后再次执行docker login,就是这么简单。我不确定发生了什么,但强制重新登录是有效的。


1
是的,退出登录后,它对我来说又可以使用了。谢谢! - Nam G VU
不行,注销对我没用。天啊,Docker真的很糟糕,我简直不敢相信他们不能显示更有用的错误信息,这个错误信息根本什么都没说,这使得问题无法解决。调试开启了吗?没有任何区别。如果Docker不能可靠地工作,它就在我需要替换的技术列表上。 - Markus Bawidamann

22

当我给镜像打标签时,使用我的Docker Hub名称可以正常工作。(在这里,xyz是一个Docker Hub名称)

# Login to docker hub account 
docker login 

# tag image 
docker tag nginx xyz/nginx

# push image
docker push xyz/nginx

对我起作用了。我之前没有标记图像。我以为由于我已登录,它会自动标记。 - Fahim Rahman
对我有效。xyz 必须是您在 Docker Hub 上的用户名吗? - Danijel

21

我曾经遇到过同样的问题,当我将我的镜像命名为something/image-name时,它无法正常工作。但是,当我改成了<docker-hub-username>/image-name时,它就奇妙地工作了。

步骤 1

docker login --username=jp9573

步骤 2

docker push jp9573/todo

以前,我使用了jaypatel/todo这种方式命名我的镜像,但我只需将其更改为username/image的模式即可。这样,我不必给镜像打标签或做其他的操作。我认为这对于新手来说是个好方法。


尝试了所有可能的事情,但这个简单的用户名非常有效。 - sandhya murugesan

18

今天我遇到了同样的问题。唯一有效的方法是明确登录到 "docker.io"

docker login docker.io

我尝试了各种其他名称,登录似乎有效,但后来会导致以下错误。

请求的资源访问被拒绝


3
这也是解决我的问题的方法。我尝试了 docker login 但没有成功,但在结尾加上明确的 docker.io 就起作用了。 - jooks
这对我来说就是这样了。 - Glitcher
明确登录到docker.io对我没有用。登录以前有效,现在停止了工作。 - rhoerbe
这对我来说是解决方案。但我添加了双引号。像这样:- docker login -u“用户名”-p“密码”docker.io - Yunus Haznedar

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