我latest
在 ECR 任务定义中使用标签时遇到问题,其中image
参数的值类似于XXXXXXXXXXXX.dkr.ecr.us-east-1.amazonaws.com/reponame/web:latest
.
latest
一旦在容器实例(注册到集群的 EC2 实例)上运行新的服务实例(任务),我希望此任务定义能够从 ECR 中提取带有标签的图像。
但是,在我的情况下,当我远程连接到容器实例并列出 docker 映像时,我可以看到它没有从 ECR 中提取最新版本的映像。
最新标签在当前版本之后有两个发布版本,因为我更新了任务定义以使用latest
明确定义版本标签的标签实例,即:v1.05
.
我在这个集群上只有一个容器实例。
我的过程中可能存在一些怪癖,但这个问题主要是关于latest
在这种情况下应该如何表现?
我的docker镜像构建和打标签、ECR推送、ECS任务定义更新、ECS服务更新流程:
# Build the image with multiple tags
docker build -t reponame/web:latest -t reponame/web:v1.05 .
# Tag the image with the ECR repo URI
docker tag ${imageId} XXXXXXXXXXXX.dkr.ecr.us-east-1.amazonaws.com/reponame/web
# Push both tags separately
docker push XXXXXXXXXXXX.dkr.ecr.us-east-1.amazonaws.com/reponame/web:v1.05
docker push XXXXXXXXXXXX.dkr.ecr.us-east-1.amazonaws.com/reponame/web:latest
# Run only if the definition file's contents has been updated
aws ecs register-task-definition --cli-input-json file://web-task-definition.json
# Update the service with force-new-deployment
aws ecs update-service \
--cluster my-cluster-name \
--service web \
--task-definition web \
--force-new-deployment
使用任务定义文件:
{
"family": "web",
"containerDefinitions": [
{
"name": "web",
"image": "XXXXXXXXXXXX.dkr.ecr.us-east-1.amazonaws.com/reponame/web:latest",
"essential": true,
"memory": 768,
"memoryReservation": 512,
"cpu": 768,
"portMappings": [
{
"containerPort": 5000,
"hostPort": 80
}
],
"entryPoint": [
"yarn", "start"
],
"environment": [
{
"name": "HOST",
"value": "0.0.0.0"
},
{
"name": "NUXT_HOST",
"value": "0.0.0.0"
},
{
"name": "NUXT_PORT",
"value": "5000"
},
{
"name": "NODE_ENV",
"value": "production"
},
{
"name": "API_URL",
"value": "/api"
}
]
}
]
}