否认:请求访问资源被拒绝:docker

问题描述 投票:256回答:33

我正在关注this link创建我的第一个docker Image并且它成功了,现在我试图将这个图像从这个link推入我的docker存储库。但每当我试图将此Image推入存储库时,我就会遇到此类错误。

denied: requested access to the resource is denied

enter image description here

有人能给我一些暗示这个问题吗?任何帮助将不胜感激。

注意:我已成功登录docker

docker dockerfile
33个回答
382
投票

感谢answer提供的Dean Wuthis comment提供的ses,在推送之前,请记得从命令行登录到docker hub帐户

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

5
投票

我今天遇到了同样的问题。对我有用的唯一事情就是明确登录到“docker.io”:

docker登录docker.io

我尝试了各种其他名称,登录似乎可以工作,但后来会导致“请求访问资源被拒绝”错误。


5
投票

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

myusername/something/image

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


3
投票

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

这是版本17.06.1

enter image description here


3
投票

简单工作方案:

到这里https://hub.docker.com/创建一个名称为johnsmith/private-repository的PRIVATE存储库,这是在构建图像时用于图像的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

完成!


3
投票

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

docker login yourregistry.azurecr.io

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

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

然后最后推动它。

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

3
投票

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

docker logout

然后docker login再次,这是微不足道的。我不确定发生了什么,但迫使重新登录工作。


3
投票

对于那些尝试将图像推送到他们自己的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

2
投票

我的回答与Azure DevOps有关,我对以下常见管道有类似的问题(它更具体但可能有助于节省时间):

  1. 从github获取资源
  2. 建立码头图像
  3. 将泊坞窗图像推送到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需要知道在哪里推送图像。


1
投票

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


1
投票

我也有这个问题。事实证明我正在使用免费套餐并尝试在私有存储库中推送超过1个图像。将1张图片设为私有,其余公众为我工作。


178
投票

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


1
投票

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

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

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

解决方案是从docker hub删除repo并使用:docker push org-name/image-name再次刷新

对于它的价值,我认为回购最初是在帐户转换为组织之前推出的。


1
投票

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

我不确定我是如何创建太多的私人回购,但如果我的计划包括5个私人回购,并且不知何故我有6个,那么这就是我将收到的错误:

denied: requested access to the resource is denied

在我的情况下,我可能最终得到了太多私有存储库,因为我将默认可见性设置为私有:

Default Visibility

您可以在此确定您可以拥有多少私人仓库:

Billing Plans

一旦我公开了有问题的回购,问题变得明显:

Make Repository Private 5 of 5


0
投票

将您的图像重命名为username / image-name docker tag your-current-image / current-image dockerhub-username / some-name:your-tag(example:latest)


0
投票

尝试退出“Docker for Windows”应用程序并退出https://hub.docker.com/网站,然后执行“docker login”和“docker push”。这对我有帮助。


0
投票

docker从命令提示符登录无效。在尝试推送时,我不断获得“请求访问资源被拒绝”。

登录到windows应用程序本身的docker后,docker push工作得很好。希望这有助于某人。


0
投票

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

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

Shah/firstimage

0
投票

如果有其他人遇到这个 - 在我的情况下,原因是我使用(不赞成的)docker compose方法来推送图像。切换到预期的docker push解决了我的问题。


0
投票

另一个(非常聪明)的原因是:你的私人回购与你的计划。


0
投票

在我的情况下sudo -E失败了这条消息。解决方案是在没有sudo的情况下提供访问do docker(创建一个组docker,将(Jenkins)用户添加到组中,在/var/run/docker.sock上设置组)。现在docker push不需要sudo,它的确有效。


0
投票

所以,这对任何人都有帮助...... 我有同样的问题,这就是我的问题和FIX。

  • 我的测试网络上有一台名为'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 因此,出于某种原因,我必须将标记中的端口包含为存储库名称的必需部分。 希望这有助于其他人。

  • 48
    投票

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

    以下是为我工作的步骤:

    1)登录docker。

    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
    

    它成功地推送到我的个人码头仓库。


    0
    投票

    所有以前的答案都是正确的,我想添加一个我没看过的信息;

    如果项目是正确推送图像的私有项目,则必须配置个人访问令牌或部署令牌并启用read_registry键。

    来源:https://gitlab.com/help/user/project/container_registry#using-with-private-projects

    希望这是有帮助的(如果问题到目前为止发布的话)


    39
    投票

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

    docker login
    

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

    docker push {namespace}/mydevrepo
    

    34
    投票

    使用以下命令:

    $ 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


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

    8
    投票

    不确定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. 返回码头中心并将回购更改回公众。这对我有用。

    7
    投票

    操作系统:Ubuntu16.04

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

    解:

    • 重启docker。 服务码头重启。
    • 它需要输入登录信息,然后自动生成配置文件。 docker login --username = yourdockerhubername [email protected]

    6
    投票

    Docker还可以限制您可以拥有的私有存储库的数量。如果您通过从本地计算机推送来创建私有存储库,它将创建存储库,但不能进一步推送到它或从中提取,并且您将获得“请求访问资源被拒绝”错误。

    © www.soinside.com 2019 - 2024. All rights reserved.