ECR中的Docker图像标记

我正在使用Jenkins在AWS ECR中推送Docker映像。

在推送图像时,我提供的标签为$ Build_Number。因此在ECR回购中,我的图像带有诸如1,2,3,4的标签。

但是当我尝试使用Jenkins job的以下命令从EC2中提取图像时

       docker pull 944XXX.dkr.ecr.us-east-1.amazonaws.com/repository1:latest

我收到错误消息,因为没有图像带有最新标签。

这里我要提取最新的图像(带有标签4)。由于docker pull命令将自动从Jenkins作业运行,因此我无法在此处对标签号进行硬编码,那么我可以用什么方式提取最新的图像?

zihaishu 回答:ECR中的Docker图像标记

我相信这里的正确方法是使用不同的标签将同一张图片推送两次。一次推入将包含没有标签的图像,然后第二次推入将在您标记完图像后成为同一图像。

请注意,您不必两次构建映像。您只需发出两次docker push

ECR足够“智能”,可以识别出图像摘要未更改,并且不会尝试实际两次上载图像。在第二次推送中,仅会将标签发送到ECR。

现在,您具有未标记的版本和带标记的版本,您可以在不带标记规范的情况下提取图像,然后将获得:latest图像。 Here is a reference to the AWS docs,其中提到如果用户未发送标签,将添加:latest标签。

流程看起来像这样:

# Build the image
docker build -f ./Dockerfile -t my-web-app
# Push the untagged image (will become the ":latest")
docker push my-web-app
# Tag the image with your build_number
docker tag my-web-app my-web-app:build_number
# Push the tagged image 
docker push my-web-app:build_number

您现在可以:

docker pull my-web-app:build_number
docker pull my-web-app

这将导致2张相同的图像,只是标签之间有所区别。

,

@Lix建议您尝试一个解决方案,或者如果您只对最新推送的图像感兴趣,而无论最新图像的标签是什么,则可以从AWS-CLI获取最新图像。

因此,您的Jenkins作业命令将为

TAG=$(aws ecr describe-images --output json --repository-name stage/redis --query 'sort_by(imageDetails,& imagePushedAt)[-1].imageTags[0]' | jq . --raw-output)
docker pull 944XXX.dkr.ecr.us-east-1.amazonaws.com/repository1:$TAG

aws-cli-ecr-list-images-get-newest

,

如果要在ECR上使用latest标签,则需要在构建图像时将其添加并推入该标签。您可以多次使用-tdocker build(请参阅https://docs.docker.com/v17.09/engine/reference/commandline/build/);只要确保将它们全部推开即可。

本文链接:https://www.f2er.com/3165836.html

大家都在问