【问题标题】:denied: requested access to the resource is denied : docker拒绝:请求的资源访问被拒绝:docker
【发布时间】:2017-06-18 11:20:43
【问题描述】:

我正在关注 this link 创建我的第一个 docker 镜像,它成功了,现在我正试图从这个link 将此镜像推送到我的 docker 存储库中。但是,每当我尝试将此图像推送到存储库时,都会出现此类错误。

denied: requested access to the resource is denied

谁能给我一些关于这个问题的提示?任何帮助将不胜感激。

注意:我已经成功登录docker了

【问题讨论】:

标签: docker dockerfile


【解决方案1】:

您可能需要在 docker push 之前将您的 docker repo 切换为私有。

感谢Dean Wu提供的answerses提供的this comment,在推送之前,记得先退出,然后从登录您的 docker hub 帐户的命令行

# you may need log out first `docker logout` ref. https://stackoverflow.com/a/53835882/248616
docker login

根据docs

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

【讨论】:

  • 不适合我。我已经尝试了[host]/[namespace]/[repo] 的所有组合,但仍然出现相同的错误(意思是,我有组织和我的帐户作为命名空间)。甚至尝试过docker login ...。我不能推:-|
  • 这个答案不应该被标记为接受!提供的解决方案显然不像其他人所指出的那样有效。
  • 这实际上解决了我的问题,所以这个答案很好。
  • 我遇到了同样的问题,结果我没有正确登录。 “docker login”的行为很尴尬,即使我输入了错误的密码,它也显示“登录成功”。所以为了正确登录,我使用了“docker login --username=”。发布这个,“docker push”按预期工作。
  • 这个答案不完整,对我不起作用。 Venu S 提供了一个完整的答案,为我解决了这个问题。
【解决方案2】:

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

【讨论】:

  • FWIW,我在docker login 上收到获取凭据时出错sudo docker login 为我工作。这让我可以推送我的私人仓库。
  • 显然 Docker 网络研讨会已经过时了。
  • 警告 sudo - 看我的回答
  • 我做了docker login 并用docker tag ubuntu franva/ubuntu 标记了我的本地图像,然后我运行了docker push franva/ubuntu
【解决方案3】:

我有同样的问题,但这里给出的接受的答案对我不起作用。 我尝试了几个步骤,最终能够绕过它来推动它。希望这对某人有所帮助。

以下是对我有用的步骤:

1) 登录到泊坞窗。

docker login -u sirimalla

2) 标记您的图像构建

我的图片名称是:mylocalimage,默认有标签:latest
我的用户名是:sirimalla,已在 docker cloud 注册,我创建了一个名为:dockerhub

的公共存储库

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

我标记如下:

docker tag mylocalimage:latest sirimalla/dockerhub:myfirstimagepush

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

docker push sirimalla/dockerhub:myfirstimagepush

它成功推送到我的个人 docker repo。

【讨论】:

  • 这个答案解决了我的问题。这应该是公认的答案。另一个答案不完整,对我不起作用。例如,另一个答案没有提到docker login。直到来到这个帖子,我才知道docker login
  • 一般来说,您应该使用 sudo 为所有命令添加前缀 ref projectatomic.io/blog/2015/08/…
  • 警告 sudo - 看我的回答
  • 这是小狗。
  • 是的,这个答案只解决了我的问题。想要解决这个问题的人请参考这个。
【解决方案4】:

使用以下命令:

$ 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

【讨论】:

【解决方案5】:

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

docker login

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

docker push {namespace}/mydevrepo

【讨论】:

  • 换句话说,执行{namespace}/wordpress-cli-ansible 之类的操作,而不是{namespace}/wordpress-helm/wordpress-cli-ansible。这是我遇到的一个问题,它阻止我推动。
【解决方案6】:

不确定 docker hub 发生了什么,但发布的解决方案均不适合我。以下是截至 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

  1. 返回 docker hub 并将 repo 改回 public。 这对我有用。

【讨论】:

  • #没有上面的特定登录命令,即使我是通过命令行登录的,推送时总是出现访问错误
  • 首先登录然后使用这些命令它肯定会工作 $ docker image tag nginx my-user-name/nginx $ docker image push my-user-name/nginx:latest
【解决方案7】:

我遇到了同样的问题,我将图像名称命名为 something/image-name,但我尝试使用 &lt;docker-hub-username&gt;/image-name,它就像一个魅力。

第 1 步

docker login --username=jp9573

第 2 步

docker push jp9573/todo

之前我给jaypatel/todo,我只是将其更改为username/image 模式。通过这种方式,我不必标记图像或任何东西。我认为这对新人来说是一个好方法。

【讨论】:

  • 尝试了所有可能的方法,这个简单的用户名就像一个魅力
【解决方案8】:

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

docker logout

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

【讨论】:

  • 是的,注销后,它又为我工作了。谢谢!
  • 不,注销对我不起作用。伙计,Docker 真的很糟糕,我不敢相信他们无法显示更多有用的错误消息,这个错误消息完全没有说明,这使得问题无法解决。调试吗?没有不同。如果 Docker 不能可靠地工作,Docker 就在我需要更换的技术列表中。
【解决方案9】:

Docker 对您可以拥有的私有存储库的数量也有限制。如果您通过从本地计算机推送来创建私有存储库,它将创建存储库,但无法向其推送或从中提取任何内容,并且您将收到“请求的资源访问被拒绝”错误。

【讨论】:

  • 如何始终推送为公共回购?
  • 我也遇到了这个问题:推送一个新的回购导致“21/20 私人回购”。最后一个 repo 进入了某种阻塞状态:即使减少了私有 repo 的总数,我仍然收到拒绝访问的错误。我不得不删除并重新创建 repo。
【解决方案10】:

我的问题只是在我的图片名称中使用了无效字符(额外的 /):

myusername/something/image

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

【讨论】:

  • 如此糟糕、不具体的错误信息!我也在做同样的事情。此外,它不允许重复的特殊字符,例如__.
  • 嘿嘿。知道这会导致头痛,但还是尝试了。错误在很大程度上是一个红鲱鱼。
【解决方案11】:

我今天遇到了同样的问题。唯一对我有用的是显式登录到 "docker.io"

docker login docker.io

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

请求的资源访问被拒绝

【讨论】:

  • 这也是为我解决问题的原因。我尝试docker login 没有成功,但最后明确的docker.io 成功了。
  • 这是给我的
  • 显式登录 docker.io 对我不起作用。过去登录工作,现在停止工作。
  • 这是我的解决方案。但我添加了双引号。像这样: - docker login -u "username" -p "password" docker.io
【解决方案12】:

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 添加为协作者。

【讨论】:

  • 这意味着我们不能从第三方公共存储库推送图像?
【解决方案13】:

当我在标记图像时使用我的 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

【讨论】:

  • 为我工作。我之前没有标记图像。我以为它会在我登录后自动标记。
【解决方案14】:

操作系统:Ubuntu16.04

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

解决办法:

  • 重新启动 docker。
    service docker restart
  • 需要输入登录信息,然后自动生成配置文件。
    docker login --username=yourdockerhubername --email=yourremail@company.com

【讨论】:

  • 这是唯一对我有用的解决方案。我已经升级了我的 Docker,然后由于某种原因, mvn dockerfile:push 因这个异常而失败。删除此 config.json 修复它。
  • 这也帮助了我。我意识到要登录,我不应该输入 url,或者如果我需要指定 docker hub url,我应该输入 docker login https://index.docker.io/v1/ -u=yourusername
【解决方案15】:

如果您在使用 Azure Container Registry 时遇到此问题,可以先登录到您的注册表来解决。

docker login yourregistry.azurecr.io

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

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

然后最后推一下。

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

【讨论】:

  • 来自 Azure,这是有帮助的!标记的第一部分不是名称空间而是注册表的主机名!
  • 这对我来说是救命稻草。非常感谢!我不知道为什么 Azure 快速入门步骤不包括这个。
【解决方案16】:

简单的工作解决方案:

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

  • 首先,docker login

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

johnsmith/private-repository(REPOSITORY) 01(TAD) c5f4a2861d6e(IMAGE ID) 2 天前(创建) 305MB(SIZE)

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

完成!

【讨论】:

    【解决方案17】:

    我的回答与 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 需要它来知道将图像推送到哪里。

    【讨论】:

      【解决方案18】:

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

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

      sudo docker login xxx.mydomain.com:8443
      

      2) 使用您的 NEXUS 服务器 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 这样的标签解决了这个问题。确保省略 procotol 和 /v2/ 东西。
      • 为什么要添加端口。以及在 xxx.mydomain.com 附近添加谁的端口。 8443 是 fot https 弹簧靴。如果是角度应用怎么办
      • @PSatishPatro 当您的存储库解析为特定的 http/https 端口时,标签需要知道将其推送到哪里(因为您实际上并没有告诉它去哪里 - 作为参数),如上面提到的,它必须是与您的完整 nexus 存储库完全相同的 url。
      【解决方案19】:

      在我将“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 名称”

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

      示例:

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

      【讨论】:

      • 对我来说重要的一点是 docker tag 命令中的标记名,它应该遵循 - /: 。在推送命令中应该使用相同的标签标识符。
      【解决方案20】:

      当您已经使用其他帐户登录时,有时可能会遇到此问题。在这些情况下,您必须:

      docker logout
      

      然后

      docker login  
      

      【讨论】:

      • 这似乎是我面临的问题。基本上我使用凭据管理器从另一台机器导入了凭据,但它似乎没有用
      【解决方案21】:

      从应用程序登录。我一直在尝试只从终端尝试,没有运气。

      这是版本 17.06.1

      【讨论】:

      • 在 MacOS 上这是适合我的解决方案。
      【解决方案22】:

      docker 登录后,您需要使用前缀命名您的图像。

      例如如果您在 docker-hub 中的用户名是 Shah,则图像应为:

      Shah/firstimage
      

      【讨论】:

        【解决方案23】:

        在我的情况下,我正在推动一个组织,我所在的团队对存储库具有管理员权限。

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

        我可以成功推送到用户名/图像名,但不能推送到组织。我三重检查了权限。没有任何效果。

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

        不管它的价值如何,我认为回购最初是在帐户转换为组织之前推送的。

        【讨论】:

          【解决方案24】:

          我真的希望这可以帮助某人(作为我自己首先查看最终答案的人):

          我不断尝试输入

          docker push user/repo/tag
          

          相反

          docker push user/repo:tag
          

          因为我的标签也是这样的:

          docker tag image user/repo/tag
          

          ...一败涂地。

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

          【讨论】:

            【解决方案25】:

            我添加另一个答案的速度很慢,但是提到docker login 的已接受答案和剩余答案缺少解决其他人在 cmets 中陈述的问题的边缘案例。

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

            强调需要输入的port 可能是那些仍在搜索的人的解决方案。 docker logindocker login &lt;private-repo-host&gt; 可以正常连接,但是在推送图像时,您将收到与 OP 相同的错误。

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

            ...

            登录成功

            就我而言,我使用的是自托管 GitLab 内置的 docker-registry,它被设置为使用端口 4567。验证必须从哪个端口访问注册表可能是冒险的。如果不指定所述端口 docker login &lt;our.gitlab.host&gt; 将登录成功,但会给出 OP 询问的相同问题:

            ...

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

            拒绝:禁止访问

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

            【讨论】:

            • 谢谢你,很有帮助!
            【解决方案26】:

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

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

            然后点击您机器中的 docker 桌面图标 -> 首选项 -> 然后使用 docker hub docker/id 和密码登录。

            【讨论】:

              【解决方案27】:

              我在使用 Gitlab 注册表时也遇到了这个错误消息。不同之处在于我试图从以前的版本中更改图像的名称。那里的问题是,被推送的图像的注册表不存在,因为图像的新名称与我组中的任何项目都不匹配。

              TLDR:在 Gitlab 中,图像名称必须与项目名称匹配。

              【讨论】:

                【解决方案28】:

                如果在docker login 之后仍然失败,请确保首先创建了您尝试推送到的存储库。

                【讨论】:

                  【解决方案29】:

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

                  【讨论】:

                    【解决方案30】:

                    所以,如果它对任何人都有帮助...
                    我遇到了同样的问题,这就是我的问题和修复方法。

                  • 我的测试网络上有一台名为“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”。
                    我已经为我的图像创建了一个标签,如下所示:

                    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
                    

                    所以出于某种原因,我不得不在标签中包含端口作为存储库名称的必需部分。



                    希望这对其他人有所帮助。

                  • 【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2017-10-07
                      • 1970-01-01
                      • 1970-01-01
                      • 2020-05-30
                      • 2023-02-14
                      • 1970-01-01
                      • 2021-02-10
                      • 1970-01-01
                      相关资源
                      最近更新 更多