У меня проблемы с использованием тега latest
в определении задачи ECR, где параметр image
имеет значение типа XXXXXXXXXXXX.dkr.ecr.us-east-1.amazonaws.com/reponame/web:latest
.
Я ожидаю, что это определение задачи извлечет образ с тегом latest
из ECR, как только новый экземпляр службы (задача) будет запущен на экземпляре контейнера (экземпляр EC2, зарегистрированный в кластере).
Однако в моем случае, когда я подключаюсь к экземпляру контейнера удаленно и выводю список образов докера, я вижу, что он не извлек последний образ релиза из ECR.
В последнем теге за текущей версией находятся две версии выпуска, начиная с тех пор, как я обновил определение задачи, чтобы использовать экземпляр тега latest
для явного определения тега версии, т.е. :v1.05
.
У меня есть только один экземпляр контейнера в этом кластере.
Возможно, в моем процессе есть какая-то странность, но этот вопрос в основном о том, как этот latest
должен вести себя в таком сценарии?
Сборка и тегирование образа моего докера, push 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"
}
]
}
]
}