从 Azure DevOps 管道将 Docker 镜像推送到 Docker Hub

6
我有一个带有Dockerfile的.Net Core网络应用程序。
我正在使用Azure DevOps管道来构建Docker镜像,并希望将该镜像推送到Docker Hub。
但是当我运行管道时,推送图像失败,并显示以下错误:
2019-07-25T07:40:39.2332684Z ##[section]Starting: Push an image
2019-07-25T07:40:39.2340807Z ==============================================================================
2019-07-25T07:40:39.2340932Z Task         : Docker
2019-07-25T07:40:39.2341017Z Description  : Build, tag, push, or run Docker images, or run a Docker command
2019-07-25T07:40:39.2341132Z Version      : 0.154.1
2019-07-25T07:40:39.2341206Z Author       : Microsoft Corporation
2019-07-25T07:40:39.2341308Z Help         : https://learn.microsoft.com/azure/devops/pipelines/tasks/build/docker
2019-07-25T07:40:39.2341405Z ==============================================================================
2019-07-25T07:40:39.4058071Z e6868ba4-0951-4724-b13b-58e178dacb79 exists true
2019-07-25T07:40:39.5494209Z [command]/usr/bin/docker push dockerDemo2019:19
2019-07-25T07:40:39.5780069Z The push refers to repository [docker.io/library/dockerDemo2019]
2019-07-25T07:40:40.5429692Z b0f339cf7b16: Preparing
2019-07-25T07:40:40.5430778Z a385a9a129e2: Preparing
2019-07-25T07:40:40.5431098Z 6339615de93e: Preparing
2019-07-25T07:40:40.5431279Z c6c9de941dfa: Preparing
2019-07-25T07:40:40.5431433Z 9c894eb0930b: Preparing
2019-07-25T07:40:40.5431696Z d56055da3352: Preparing
2019-07-25T07:40:40.5431855Z d56055da3352: Waiting
2019-07-25T07:40:42.4737943Z denied: requested access to the resource is denied
2019-07-25T07:40:42.4880225Z ##[error]denied: requested access to the resource is denied
2019-07-25T07:40:42.4932585Z ##[error]/usr/bin/docker failed with return code: 1
2019-07-25T07:40:42.4960825Z ##[section]Finishing: Push an image

我的管道设置:

在此输入图片描述

我已验证Dockerregistry服务连接,并已使用Dockerhub凭据进行了连接。


1
在Docker任务中,将其切换到版本2.*(我认为您目前使用的是0.*版本)。 - Shayki Abramczyk
@ShaykiAbramczyk:您是正确的,将其更改为2.0*后,构建成功了,但是会出现警告未指定任何存储库。不会推送任何内容。 - Amit Kumar
请检查我的答案 :) - Shayki Abramczyk
3个回答

11
你需要将Docker任务版本从0.*切换到2.*
然后你还需要定义你的Docker hub存储库名称:

enter image description here

enter image description here

同样的步骤也需要在build步骤中执行 - 切换到2.*并定义存储库名称。
顺便说一下,在2.*版本中,动作名称是buildAndPush,它结合了构建和推送任务。

1
非常感谢。Azure文档在这方面真的很差。干杯! - falkon21
奇怪,我按照步骤操作了,但出现了不同的错误。 - Rajesh Rajamani
奇怪,我按照步骤操作,但是出现了不同的错误。最后几行日志将会非常有用,如果我能够解决这个问题的话。我可以看到镜像已经构建完成,然而在最后一行我得到了一个404错误,我猜测这是由Docker hub返回的。不确定为什么。 - Rajesh Rajamani
@RajeshRajamani,也许这是一个新问题的起点 :) - Shayki Abramczyk
1
如果我只想推送图像怎么办?我如何指定要推送哪个图像? - Konstantin

1
我的服务连接是问题的关键。因为默认设置为“其他”,我把它搞砸了。
在将注册表类型设置为DockerHub并随后设置凭据后,它正常工作。
当然,[![https://stackoverflow.com/users/7409220/shayki-abramczyk]提出的步骤也很重要。

enter image description here


0
确保您已经设置了DockerHub和Azure Pipelines的服务连接(转到项目设置->服务连接->新建服务连接->选择"Docker Registry"->填写所需的详细信息),以便直接从Azure Pipelines将镜像推送到Docker Hub。
创建服务连接后,转到配置管道并编辑管道->点击位于“保存并运行”按钮上方右上角的“显示助手”参考此图像
在这里,搜索"docker push"。它将显示'Docker'和'Docker compose'->选择'Docker'查看此图像->选择之前为Docker注册表配置的服务连接,替换'container registry'->'container repository'这是我们需要正确以请查看此图像格式提及“”的地方。否则,您将面临"请求访问资源被拒绝"的错误。
希望这对你有帮助!祝你度过愉快的一天!谢谢。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接