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

denied: requested access to the resource is denied

注:我已成功登录docker


当前回答

我带着同样的信息来到这里,但来自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上绞尽脑汁。

其他回答

尝试签出“Docker for Windows”应用程序和签出https://hub.docker.com/网站后执行“Docker登录”和“Docker推送”。 这对我很有帮助。

Docker登录参数在~/. Docker /config。Json应该正确设置(这是在登录后自动完成)

1)不传递SERVER参数登录:

$ echo "<password>" | docker login -u foo --password-stdin

成功登录后,在~/.docker/config中会出现如下结果。Json和push image成功。

***
"https://index.docker.io/v1/": {
    "auth": "YWNhcm***"
}
***

2)登录时传递SERVER参数index.docker.io

$ echo "<password>" | docker login index.docker.io -u foo --password-stdin

成功登录后,在~/.docker/config中会出现如下结果。Json和push image失败。

***
"index.docker.io": {
    "auth": "YWNhcm***"
}
***

对于那些试图将映像推送到自己的Nexus存储库管理器的人,请执行以下操作:

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

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

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

# 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

在使用Fabric8 Maven插件(在Windows 10上)和直接从命令行调用docker push时,我一直在与docker push作斗争。

最后我用同样的方法解决了这两个问题。

我的回购叫做vgrazi/playpen。在我的pom中,我将docker镜像名称更改为vgrazi/playpen,如下所示:

<plugin>
  <groupId>io.fabric8</groupId>
  <artifactId>docker-maven-plugin</artifactId>
  <version>0.31.0</version>
  <configuration>
     <dockerHost>npipe:////./pipe/docker_engine</dockerHost>
     <verbose>true</verbose>
     <images>
       <image>
         <name>vgrazi/playpen</name>
         <build>
           <dockerFileDir>${project.basedir}/src/main/docker/</dockerFileDir>
                         ...

这让我做一个mvn清洁包docker:build docker:push从命令行,最后,图像出现在我的repo,这是我试图解决的问题。

顺便说一句,为了回答OP并让它直接从命令行工作,没有Maven,我做了以下操作(PS是PowerShell提示符,不要键入它):

PS docker images
vgrazi/docker-test/docker-play                playpen             0722e876ebd7        40 minutes ago      536MB
rabbitmq                                      3-management        68055d63a993        10 days ago         180MB
PS docker tag 0722e876ebd7 vgrazi:playpen
PS docker push vgrazi/playpen

图像再次出现在我的docker中。Io: repo vgrazi/playpen