首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ECR中的Docker映像标记

ECR中的Docker映像标记
EN

Stack Overflow用户
提问于 2019-11-04 22:51:44
回答 3查看 7.5K关注 0票数 3

我正在使用Jenkins在AWS ECR中推送docker镜像。

当推送图像时,我在ECR repo中提供了标记为$Build_Number.So的图像,我有标记为1、2、3、4的图像。

但是当我试图用Jenkins job的以下命令从EC2中拉出图像时

代码语言:javascript
复制
       docker pull 944XXX.dkr.ecr.us-east-1.amazonaws.com/repository1:latest

我得到错误,因为没有与标签为最新的图像。

在这里,我想拉取最新的图像(带有标签4),.I不能在这里硬编码标签号,因为docker pull命令将从Jenkins job automatically.So运行,我可以用什么方法拉取最新的图像?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-11-04 22:55:43

我认为这里的正确方法应该是使用不同的标签将相同的图像推送两次。一次推送将包含没有标签的图像,然后第二次推送将是您标记后的同一图像。

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

ECR足够“聪明”,能够识别图像摘要没有改变,也不会尝试上传两次图像。在第二次推送时,只会将标签发送到ECR。

现在您有了一个未标记的版本和一个标记的版本,您可以拉取没有标记规范的镜像,您将获得:latest镜像。Here is a reference to the AWS docs,他们提到如果用户没有发送任何标签,将添加:latest标签。

流程将如下所示:

代码语言:javascript
复制
# 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

现在,您将能够:

代码语言:javascript
复制
docker pull my-web-app:build_number
docker pull my-web-app

这将导致两个相同的图像,其中只有标签在它们之间进行区分。

票数 11
EN

Stack Overflow用户

发布于 2019-11-04 23:19:04

@Lix推荐了一种解决方案,你可以尝试一下,或者如果你只对最新的推送镜像感兴趣,而不管最新镜像的标签是什么,那么你可以从AWS-CLI获得最新的镜像。

因此您的Jenkins作业命令将是

代码语言:javascript
复制
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

票数 4
EN

Stack Overflow用户

发布于 2019-11-04 22:54:57

如果您想在ECR上添加latest标记,则需要在构建镜像时将其添加并推送到此处。您可以多次使用-t来推送(参见https://docs.docker.com/v17.09/engine/reference/commandline/build/);只需确保将它们全部推送即可。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58695853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档