パラメータが のような値を持つlatest
ECR タスク定義でタグを使用すると問題が発生します。image
XXXXXXXXXXXX.dkr.ecr.us-east-1.amazonaws.com/reponame/web:latest
latest
新しいサービス インスタンス (タスク) がコンテナー インスタンス (クラスターに登録された EC2 インスタンス) で実行されると、このタスク定義がタグ付きのイメージを ECR からプルすることを期待しています。
ただし、私の場合、コンテナー インスタンスにリモートで接続して Docker イメージを一覧表示すると、ECR から最新のリリース イメージがプルされていないことがわかります。
最新のタグにはlatest
、バージョン タグを明示的に定義するタグ インスタンス、つまり:v1.05
.
このクラスターにはコンテナー インスタンスが 1 つだけあります。
私のプロセスに癖がある可能性がありますが、この質問は主に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"
}
]
}
]
}