我正在按照这个链接创建我的第一个docker映像,它成功了,现在我试图从这个链接将这个映像推到我的docker存储库中。但是每当我试图将这个映像推入存储库时,我就会得到这种类型的错误。

denied: requested access to the resource is denied

注:我已成功登录docker


当前回答

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

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

其他回答

我的答案与Azure DevOps相关,类似于我在以下通用管道中遇到的问题(它更具体,但它可能有助于节省时间):

从github获取资源 构建docker映像 推送docker镜像到dockerhub

我在推送拒绝时收到的错误:对资源的请求访问被拒绝发送到这里。

请注意映像名称中包含的变量$(Build.Repository.Name)。它默认是来自github的存储库名称,但为了让您的推送工作,它应该是dockerhub_account_username/your_dockerhub_repository_name。

将$(build . repository . name)替换为dockerhub_account_username/your_dockerhub_repository_name在映像名称字段中用于构建和推送步骤。

dockerhub api需要这一点来知道在哪里推送图像。

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

myusername/something/image

无效的映像名称。/上的用户名都尝试dangillmor something-image。希望这能帮助到一些人。

步骤1:修改docker帐号的隐私模式

https://hub.docker.com/settings/default-privacy

第二步:执行屏幕短片中提到的以下命令:

码头工人的图片 docker tag <<TAG_ID>> <<USER_NAME>>/<<IMAGE_NAME>>:最新的 Docker登录Docker .io docker push <<USER_NAME>>/<<IMAGE_NAME>>:最新的

输出:

我带着同样的信息来到这里,但来自Azure DevOps。

在我的例子中,我使用docker-compose,而不仅仅是docker,并在yaml中编写构建管道。

- task: DockerCompose@0
  displayName: 'Push services'
  inputs:
    azureSubscription: '$(Parameters.azureSubscriptionEndpoint)'
    azureContainerRegistry: '$(Parameters.azureContainerRegistry)'
    dockerComposeFile: '$(Parameters.dockerComposeFile)'
    additionalDockerComposeFiles: |
      docker-compose.release.yml
      docker-compose.ci.yml
    dockerComposeFileArgs: 'PublishFolder=publish'
    action: 'Push services'
    additionalImageTags: '$(Build.BuildId)'
    includeLatestTag: true

我得到的消息是明确地说,它正在尝试推送到docker。io,这不是我想要的。我本来打算把它送到我的Azure容器注册中心。

这里缺少的是输入下的这一行:

containerregistrytype: Azure Container Registry

上面构建yaml的现有管道向导根本没有这一行。 希望这能帮助其他人在Azure DevOps上绞尽脑汁。

在我的例子中,sudo -E处理此消息失败。解决方案是提供访问do docker而不使用sudo(创建一个组docker,将(Jenkins)用户添加到组中,将组设置在/var/run/docker.sock上)。现在docker push不需要sudo了,而且可以工作。