我已经在 ECS 上设置了集群、容器、任务和服务。
在我创建服务后,它似乎正在运行,并有“3 个所需任务”,但是没有创建待处理或正在运行的任务。实际上它似乎什么也没做。
我的任务定义(不包括空值和空数组)是
{
"containerDefinitions": [
{
"portMappings": [
{
"hostPort": 5000,
"protocol": "tcp",
"containerPort": 25565
},
{
"hostPort": 5000,
"protocol": "udp",
"containerPort": 25565
}
],
"cpu": 0,
"memoryReservation": 1024,
"image": "itzg/bungeecord",
"essential": true,
"name": "BungeeCord"
}
],
"compatibilities": [
"EC2"
],
"taskDefinitionArn": "arn:aws:ecs:us-west-1:949960343466:task-definition/BungeeCordTask:3",
"family": "BungeeCordTask",
"requiresAttributes": [
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.21"
}
],
"requiresCompatibilities": [
"EC2"
],
"revision": 3,
"status": "ACTIVE",
}
我的集群有3个ECS实例,它们都在运行,并且上面没有任何内容: 我的集群
我的服务在这里: 我的服务
我没有设置任何自动缩放、负载平衡或任何其他功能。但我确实有一些非常默认的服务发现。
有人知道为什么没有任务开始吗?
编辑:
- 我看了一下“已停止的任务”,它实际上是空的。
- 我还通过 SSH 连接到每个 ec2 实例,并查看了 /var/log:我发现文件夹 /var/log/ecs 包含一些日志文件,但没有任何错误或与我的任务特别相关的内容。它似乎正在成功轮询亚马逊 Web 端点以获取更新。
- 我还运行了 curl google.com 来验证他们是否有外部访问权限。
答案1
我会检查 ECS 服务中的“事件”选项卡。在某些情况下,它会告诉您没有足够的内存来启动容器。如果不了解的话,找到它有点困难,因为它隐藏在服务内的选项卡中。我预计一定发生了一些事件。
答案2
在里面集群选项卡中,选择集群。在服务打开任务选项卡并将视图切换为“已停止的任务”。
您应该会看到启动失败的任务列表以及失败的原因。
还要检查/var/log/amazon/{something about ecr}/*
其他可能的错误。
可能是实例无法访问 docker 注册表(网络配置问题)或者如果是 ECR(IAM 角色)则无法登录或需要用户名/密码。
希望有帮助:)
答案3
这个答案可能会对某些人有所帮助。对我来说,类似地,该服务没有尝试启动任何任务 - 没有停止的任务,没有事件,CloudTrail 中没有显示任何内容。
事实证明,服务定义中的一个子网已不存在。该服务默默地无法启动任何任务,也没有记录任何尝试的证据。因此,如果有疑问,请尝试重新创建该服务,以帮助确保您尝试使用的所有资源仍然存在。
答案4
找出任务无法启动的原因的另一种方法是使用 AWS-CLI 分析日志。例如,要查看有关名为 mycluster 的集群中 ID 为 xxxxx 的任务的信息,我们可以执行以下操作:
aws ecs describe-tasks --cluster mycluster --tasks xxxxx
然后搜索字段“stoppedReason”