拒绝:请求的对资源的访问被拒绝:泊坞窗


371

我正在跟踪此链接以创建我的第一个Docker映像,该映像成功运行,现在我正尝试通过此链接将此映像推送到我的docker存储库中。但是,每当我尝试将此映像推送到存储库中时,都会出现此类错误。

denied: requested access to the resource is denied

在此处输入图片说明

有人可以给我一些有关这个问题的提示吗?任何帮助,将不胜感激。

注意:我已成功登录docker



确保确认您的电子邮件。如果您正在考虑谁会做这种愚蠢的事情,则在推送之前我没有确认我的电子邮件。
Luv33preet

Answers:


548

在docker push之前,您可能需要将docker repo切换为private。

多亏了答案提供吴院长此评论SES,推前,记得要注销,然后登录命令行到您的码头工人枢纽帐户

# you may need log out first `docker logout` ref. https://stackoverflow.com/a/53835882/248616
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

43
不适合我。我已经尝试了的所有组合,[host]/[namespace]/[repo]但仍然是相同的错误(意味着,我拥有组织和帐户作为名称空间)。甚至尝试过docker login ...。我不能推:-|
nicerobot '17

1
你好我跟随你的命令得到了错误---来自守护程序的错误响应:没有这样的图像:ubuntu-nodejs:latest
Yash

34
此答案不应被标记为已接受!提供的解决方案显然无法像其他人指出的那样工作。
SamDevx

6
我遇到了同样的问题,结果发现我没有正确登录。“ docker login”的行为笨拙,即使输入了错误的密码也显示“ login成功”。因此,要正确登录,我使用了“ docker login <url> --username = <username>”。发布此消息后,“ docker push”按预期工作。
Devesh Chanchlani

2
这个答案不完整,对我不起作用。Venu S提供了完整的答案,为我解决了这个问题。
rm.rf.etc

184

我在参加Docker初学者课程时遇到了同样的问题。我通过做一个解决了这个问题docker login docker push调用之前。


8
FWIW,我在 获取凭据出错docker loginsudo docker login为我工作。这使我可以进行私人回购。
johnsampson

1
显然Docker网络研讨会已经过时了。
路易·德·索萨

请注意
sudo-

80

我有同样的问题,但是这里给出的可接受答案对我不起作用。我尝试了几个步骤,终于能够解决问题。希望这对某人有帮助。

这是为我工作的步骤:

1)登录到码头工人。

docker login -u sirimalla

2)标记您的图像构建

在这里我的形象的名字是:mylocalimage默认情况下它具有标签:最新的
和我的用户名是:sirimalla与泊坞窗云注册,和我创建了一个名为公共仓库:dockerhub

所以我的个人存储库现在变成了:sirimalla / dockerhub ,我想用tag推送图像:myfirstimagepush

我标记如下:

docker tag mylocalimage:latest sirimalla/dockerhub:myfirstimagepush

3)将映像推送到我的个人docker存储库中,如下所示

docker push sirimalla/dockerhub:myfirstimagepush

它成功地推送到了我的个人docker存储库中。


2
这个答案解决了我的问题。这应该是公认的答案。另一个答案不完整,对我不起作用。例如,另一个答案没有提及docker login。在进入这个主题之前,我并不了解docker login
rm.rf.etc

一般来说,你应该使用sudo前缀所有的命令参考projectatomic.io/blog/2015/08/...
wmitchell

请注意
sudo-

1
这是小狗。
戴夫·霍奇金森

1
是的,这个答案只能解决我的问题。如果想要解决此问题,请与此人联系。
Maha Lak

42

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

docker login

然后我使用'tagged name'推送了我的图片。

docker push {namespace}/mydevrepo

39

使用以下命令:

$ 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这样的公共存储库,因此命令如下:

$ 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


1
这是对我有用的,使用:代替/,谢谢。
克里斯(Kris)

此线程中问题的可能解释: github.com/moby/moby/issues/31760#issuecomment-309812486
gp。

谢谢,就是这样。应该是公认的答案恕我直言:)
Nk54

10

docker处理用户ID和存储库的方式可能会有些混乱。假设您在Docker Hub上创建了一个用户帐户xyz。新帐户将自动建立一个名称空间xyz。然后,您创建一个名为myrepo的存储库。存储库名称实际上是xyz/myrepo

要推送图像,您应该执行以下操作:

docker push docker.io/xyz/myrepo

您可以根据需要添加“:latest”或其他标签。

如果收到requested access to the resource is denied错误消息:

  1. 转到https://hub.docker.com/并以xyz身份登录。
  2. 单击您的存储库xyz / myrepo。
  3. 单击协作者。
  4. 将xyz添加为协作者。

这样就意味着我们不能从第三方公共资源库推送图像?
sdinesh94

为我不工作:(
Nom1fan

10

不确定Docker Hub发生了什么,但是发布的所有解决方案都不适合我。这是截至2018年1月对我有用的解决方法:

  1. 转到hub.docker.com并将您的存储库更改为私有
  2. 在您的外壳中执行:

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

  1. 返回docker hub并将回购更改回公开。那对我有用。

8

Docker对您可以拥有的私有存储库的数量也有限制。如果要通过从本地计算机推送来创建私有存储库,它将创建存储库,但无法将其进一步推送或从中拉出,并且会出现“请求的对资源的访问被拒绝”错误。


如何始终作为公开回购推销?
Raja Anbazhagan

7

操作系统:Ubuntu16.04

原因:我删除了客户端配置文件(〜/ .docker / config.json

解:

  • 重新启动docker。
    服务docker重新启动
  • 需要输入登录信息,然后自动生成配置文件。
    docker login --username =您的dockerhubername --email=youremail@company.com

1
这是唯一对我有用的解决方案。我已经升级了Docker,然后由于某种原因,mvn dockerfile:push失败,出现此异常。删除此config.json即可修复它。
anand1st

这也帮助了我。我意识到要登录要么不应该输入该网址,要么如果我需要指定docker login https://index.docker.io/v1/ -u=yourusername
docker

7

我的问题很简单,就是在图片名称中使用无效字符(一个额外的/):

myusername/something/image

是无效的图片名称。尝试myusername / something-image。希望这对某人有帮助。


如此可怕的,非特定的错误消息!我在做同样的事情。此外,它也不允许重复使用特殊字符,例如__
ijoseph '19

对我有用,谢谢!
肯尼·李

6

我今天有同样的问题。对我来说唯一有效的方法是显式登录“ docker.io”

docker login docker.io

我尝试了其他各种名称,但登录似乎可以正常工作,但稍后会导致以下错误。

请求的对资源的访问被拒绝


2
这也是为我解决问题的原因。我尝试docker login并没有成功,但最后的显式操作成功docker.io了。
玩笑

这就是我的需要
Glitcher

显式登录docker.io对我不起作用。登录过去曾经有效,现在已停止工作。
rhoerbe

5

我也遇到了这个问题,我在这里测试了解决方案,但无济于事,至少根据的输出,我已经正确登录,docker login但仍然无法推送图像。最终奏效的只是要做:

docker logout

docker login一次,那是微不足道的。我不确定发生了什么,但是强制重新登录有效。


1
它也帮助了我!
LeventeOrbán19年

1
是的,注销后,它重新为我工作。谢谢!
Nam G VU

4

如果在使用Azure容器注册表时遇到此问题,则可以通过首先登录到注册表来解决此问题。

docker login yourregistry.azurecr.io

然后标记您的图像以匹配您的注册表的主机名。

docker image tag yourimagename:[version] yourregistry.azurecr.io/yourimagename:[version]

然后最后将其推入。

docker push yourregistry.azurecr.io/yourimagename:[version]

1
来自Azure的帮助!标记的第一部分不是名称空间,而是注册表的主机名!
binaryguy

4

对于那些尝试将图像推送到自己的Nexus Repository Manager的用户,请执行以下操作:

1)登录到您的Nexus Repository Manager(端口8443与特定的Docker主机存储库相关联)

sudo docker login xxx.mydomain.com:8443

2)使用您的NEXUS SERVER IP / DNS标记图像

sudo docker tag myimage:latest xxx.mydomain.com:8443/myimage:1.0.0

3)推图片

sudo docker push xxx.mydomain.com:8443/myimage:1.0.0

我在jenkins docker插件中遇到一个始终引用docker.io的问题。像xxx.mydomain.com:8443/myimage:1.0.0这样的标签解决了该问题。确保忽略普罗考特和/ v2 /。
Himmet Avsar

为什么要添加端口。并在xxx.mydomain.com附近添加其端口。8443是https春季启动版。如果是角度应用该怎么办
P Satish Patro

1
@PSatishPatro当您的存储库解析为特定的http / https端口时,标记将需要知道将其推送到何处(因为您实际上并没有告诉它去哪里-作为参数),如上所述,它必须是确切的网址作为完整的连结存储库。
菲尔(Phil)


3

简单的工作解决方案:

转到此处https://hub.docker.com/创建一个名称为PRIVATE的存储库,例如,johnsmith/private-repository这是NAME/REPOSITORY构建映像时将用于映像的名称。

  • 第一, docker login

  • 其次,我使用“ docker build -t johnsmith/private-repository:01 .”创建图像,然后使用“ docker images”确认创建的图像,例如下面的黄色框:(抱歉,我不能粘贴表格格式,只能粘贴文本字符串)

johnsmith / private-repository(存储库)01(TAD)c5f4a2861d6e(图像ID)2天前(创建)305MB(大小)

  • 第三,我用 docker push johnsmith/private-repository:01

做完了!


2

我的答案与我在以下常见管道中遇到的类似Azure DevOps问题有关(它更具体,但可能会帮助某人节省时间):

  1. 从github获取资源
  2. 建立Docker映像
  3. 将Docker映像推送到dockerhub

我在推送时收到的错误 denied: requested access to the resource is denied发送到这里。

请注意$(Build.Repository.Name)图像名称中包含的变量。默认情况下,它是来自github的存储库的名称,但是对于您的推送工作应该使用dockerhub_account_username/your_dockerhub_repository_name

替换$(Build.Repository.Name)dockerhub_account_username/your_dockerhub_repository_name在图像名称字段为构建和推送步骤。

dockerhub api需要使用它来知道将映像推送到哪里。


2

在将“ docker login https://hub.docker.com ” 更改为“ docker login docker.io ”后,它起作用了 ”并提供了用户名和密码后,此方法成功了。

然后遵循以下命令:

docker tag local-image:tagname new-repo:tagname

docker push new-repo:tagname

注意: “ new-repo”将包含“ Docker ID + Repo name”

在这里,在运行以下命令之前,我已经在Docker Hub中创建了“ ubuntu”存储库。

例:

docker tag alok/ubuntu:latest aloktiwari2007/ubuntu:latest

docker push aloktiwari2007/ubuntu:latest

对我来说重要的一点是docker tag命令中的标记名,它应该遵循-<dockeruserid> / <远程存储库名称>:<tag>。相同的标签标识符应在push命令中使用。
Tanmay Patil


1

我也有这个问题。原来,我使用的是免费套餐,并尝试在私有存储库中推送1个以上的映像。将1张图片设为私人照片,其余的都为我工作。


1

就我而言,我被推到一个团队中,该团队所在的团队对存储库具有管理员权限。

所以我的推送命令是: docker push org-name/image-name

我可以成功推送到用户名/映像名称,但不能推送到组织。我三重检查了权限。没事。

解决方案是从docker hub删除存储库,然后再次使用以下命令重新推送: docker push org-name/image-name

就其价值而言,我认为回购最初是在将帐户转换为组织之前进行的。


1

因此,以防万一对任何人都有帮助...
我遇到了同样的问题,这就是我的问题以及FIX的含义。

  • 我在测试网络上有一台名为“银河”的计算机。
  • 我使用以下运行命令设置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
    

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



    希望这对其他人有帮助。



  • 1

    这个答案对我未来的自我和其他人一样重要。当我正确登录时,我遇到了这个确切的问题,但是当我的私有存储库数量大于或等于计划允许的限制时,我试图推送到私有存储库。

    我不确定我如何能够创建太多私人仓库,但是如果我的计划包括5个私人仓库,以某种方式我有6个私人仓库,那么这就是我将收到的错误:

    denied: requested access to the resource is denied

    在我的情况下,由于我的默认可见性设置为private,最终我可能拥有太多的私有存储库:

    默认可见性

    在这里,您可以确定可以拥有多少个私人仓库:

    计费方案

    一旦我将有问题的回购公之于众,问题就显而易见了:

    将存储库设为私有5之5


    1

    我真的希望这对某人(谁像我自己一样先寻找最终答案)有所帮助:

    我不断尝试输入

    docker push user/repo/tag
    

    代替

    docker push user/repo:tag
    

    由于我还这样制作了标签:

    docker tag image user/repo/tag
    

    ...所有地狱都输了

    我衷心希望您不要重蹈覆辙。我在这上面浪费了30分钟...


    1

    我很难再添加一个答案,但是接受的答案和提及的其余答案docker login都缺少解决其他人在评论中指出的问题的案例。

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

    port对于仍在搜索的人来说,强调需要输入可能是解决方案。docker logindocker login <private-repo-host>可以毫无问题地进行连接,但是当需要推送图像时,您将得到与OP相同的错误。

    也就是说,您可以不定义主机或端口进行连接,但仍然获得:

    ...

    登录成功

    就我而言,我使用的是自托管的GitLab,它内置于docker-registry中,设置为使用port 4567。验证必须从哪个端口访问注册表可能是一种冒险。没有指定该端口docker login <our.gitlab.host>将成功登录,但是给OP询问相同的问题:

    ...

    推送指的是存储库[...]

    拒绝:禁止访问

    如果您使用的是docker.io/dockerhub,则可能不会出现此问题,但是如果您使用的是自托管/私有注册表解决方案,则概率增加,您需要同时使用docker注册表的主机和端口进行登录。


    谢谢,最有帮助!
    Alfabravo

    1

    请勿误导标签名称。
    我解决这个问题的方法:

    Command 1(Create Tag): docker tag my-nginx:latest rsachde/nginx-repository/trys:1.0 (Didn't push)
    Command 2(Push): docker push rsachde/nginx-repository/try:1.0 
    

    输出:

    拒绝:请求的对资源的访问被拒绝


    Command 1.1(Create Tag): docker tag my-nginx:latest rsachde/nginx-repository/:trys 
    Command 2.2(Push): docker push rsachde/nginx-repository:trys 
    

    输出:

    尝试:消化:sha256:405b6f0ae25772ef71b8f59fd6a56ff9b426f50bd24bac2b5db41f65efd3387c大小:1365

    Tag具有误导性,请确保您理解。


    1

    最简单的方法是使用docker桌面(适用于Windows 10或更高版本和Mac)

    通过提供dockerID首次注册到docker hub

    然后单击计算机中的docker桌面图标,然后->首选项->然后使用docker hub docker / id和密码登录。

    在此处输入图片说明


    0

    将您的映像重命名为username / image-name docker tag your-current-image / current-image dockerhub-username / some-name:your-tag(示例:最新)


    By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
    Licensed under cc by-sa 3.0 with attribution required.