我最近一直在学习AWS,我一直在尝试使用EC2实例在Ecs集群上运行一个简单的任务。任务定义只是一个简单的定义。它只是从我的私人 ECR 中提取图像以在 ECS 上运行。但是,我无法启动任务并找到有关 docker api 版本的 ecs Agent 错误日志。
我发现我的任务定义总是有这些低于1.24的docker-remote-api版本,而且我找不到编辑它的方法。
"requiresAttributes": [
{
"name": "com.amazonaws.ecs.capability.logging-driver.awslogs"
},
{
"name": "com.amazonaws.ecs.capability.ecr-auth"
},
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.19"
},
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.28"
},
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.18"
},
{
"name": "ecs.capability.task-eni"
},
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.29"
}
],
有关更多信息,我在 ECS 集群上尝试了以下操作系统。
ECS代理版本:1.88
我的问题是你有办法使用特定的 docker-remote-api 创建任务定义吗?
问题似乎在于您的 EC2 实例上的 Docker 版本不支持您的任务定义所需的较新 API 版本。如果 EC2 实例使用较旧的 Amazon 系统映像 (AMI),这种情况很常见。
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html
或者您也可以通过 CLI 获取 AMI:
aws ssm get-parameter --name /aws/service/ecs/optimized-ami/amazon-linux-2/recommended/image_id --region <your-region>
所以基本上您应该为您的 EC2 实例切换到更新的 ECS 优化 AMI。这些 AMI 预先配置了正确的 Docker 版本和 ECS 代理,以便顺利处理 ECS 任务。 如果您不愿意更新 AMI,您可以手动更新 ecs-agent:
sudo yum update -y ecs-init docker
sudo systemctl restart ecs sudo
systemctl restart docker
但老实说,切换到新的 AMI 通常更容易、更干净。
对于最后一个问题,不,您无法在 Amazon ECS 的任务定义中显式指定或控制 Docker Remote API 版本。