"latest" 标签在 ECS 任务定义和从 ECR 中提取的容器实例中如何工作?
How does "latest" tag work in an ECS task definition and container instances pulling from ECR?
我在 ECR 任务定义中使用 latest
标签时遇到问题,其中 image
参数的值类似于 XXXXXXXXXXXX.dkr.ecr.us-east-1.amazonaws.com/reponame/web:latest
.
一旦新服务实例(任务)在容器实例(注册到集群)。
但是在我的例子中,当我远程连接到容器实例并列出 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"
}
]
}
]
}
原来问题出在我的脚本上。正在使用一个不同的变量,它的旧值仍然存储在我的终端会话中。
我已经通过在任务定义的图像源中使用 latest
标签验证 url 确实有一个新启动的服务实例可以从 ECR 中使用 latest
标签拉入图像.
无需注册任务定义的新修订版。
作为旁注,需要小心处理 latest
标签。在这种情况下,它似乎可行,但在许多其他情况下,它很容易出错:Ref1, Ref2
构建新镜像时必须标签并推送latest
,否则标签不会在注册表中更新。
当 运行 图像时还有一个强制拉取的选项,这样 docker 主机就不会假设仅仅因为它昨天拉取了 latest
,它仍然应该尝试拉取 [=10] =]今天
我在 ECR 任务定义中使用 latest
标签时遇到问题,其中 image
参数的值类似于 XXXXXXXXXXXX.dkr.ecr.us-east-1.amazonaws.com/reponame/web:latest
.
一旦新服务实例(任务)在容器实例(注册到集群)。
但是在我的例子中,当我远程连接到容器实例并列出 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"
}
]
}
]
}
原来问题出在我的脚本上。正在使用一个不同的变量,它的旧值仍然存储在我的终端会话中。
我已经通过在任务定义的图像源中使用 latest
标签验证 url 确实有一个新启动的服务实例可以从 ECR 中使用 latest
标签拉入图像.
无需注册任务定义的新修订版。
作为旁注,需要小心处理 latest
标签。在这种情况下,它似乎可行,但在许多其他情况下,它很容易出错:Ref1, Ref2
构建新镜像时必须标签并推送latest
,否则标签不会在注册表中更新。
当 运行 图像时还有一个强制拉取的选项,这样 docker 主机就不会假设仅仅因为它昨天拉取了 latest
,它仍然应该尝试拉取 [=10] =]今天