6

パラメータが のような値を持つlatestECR タスク定義でタグを使用すると問題が発生します。imageXXXXXXXXXXXX.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"
        }
      ]
    }
  ]
}
4

2 に答える 2