Node.js 如何在不退出的情况下在AWS ECS上运行节点容器

Node.js 如何在不退出的情况下在AWS ECS上运行节点容器,node.js,docker,amazon-ecs,forever-monitor,Node.js,Docker,Amazon Ecs,Forever Monitor,我正在努力让node.js容器在ECS上运行。当我使用docker compose在本地运行它时,它运行良好,但在ECS上它运行2-3分钟,并从负载平衡器处理一些连接2-3次运行状况检查,然后关闭。我不知道为什么 我的Dockerfile- FROM node:6.10 RUN npm install -g nodemon \ && npm install forever-monitor \ winston \ express-winston RUN

我正在努力让node.js容器在ECS上运行。当我使用docker compose在本地运行它时,它运行良好,但在ECS上它运行2-3分钟,并从负载平衡器处理一些连接2-3次运行状况检查,然后关闭。我不知道为什么

我的Dockerfile-

FROM node:6.10

RUN npm install -g nodemon \
    && npm install forever-monitor \
    winston \
    express-winston

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY package.json /usr/src/app/
RUN npm install

COPY . /usr/src/app

EXPOSE 3000

CMD [ "npm", "start" ]
然后在my package.json中-

{
  ...
  "main": "forever.js",
  "dependencies": {
    "mongodb": "~2.0",
    "abbajs": ">=0.1.4",
    "express": ">=4.15.2"
  }
  ...
}
在我的docker-compose.yml中,我与nodemon一起运行-

node:
  ...
  command: nodemon
在我的cloudWatch日志中,我可以看到一切开始-

14:20:24  npm info lifecycle my_app@1.0.0~start: my_app@1.0.0
然后我看到所有的健康检查请求都使用http 200,然后过了一会儿,所有的请求都结束了-

14:23:00  npm info lifecycle mapov_reporting@1.0.0~poststart: mapov_reporting@1.0.0
14:23:00  npm info ok
我已经尝试过将start.js脚本打包,但这似乎没有任何区别

更新

我的ECS任务定义-

{
  "requiresAttributes": [
    {
      "value": null,
      "name": "com.amazonaws.ecs.capability.ecr-auth",
      "targetId": null,
      "targetType": null
    },
    {
      "value": null,
      "name": "com.amazonaws.ecs.capability.logging-driver.awslogs",
      "targetId": null,
      "targetType": null
    },
    {
      "value": null,
      "name": "com.amazonaws.ecs.capability.docker-remote-api.1.19",
      "targetId": null,
      "targetType": null
    }
  ],
  "taskDefinitionArn": "arn:aws:ecs:us-east-1:562155596068:task-definition/node:12",
  "networkMode": "bridge",
  "status": "ACTIVE",
  "revision": 12,
  "taskRoleArn": null,
  "containerDefinitions": [
    {
      "volumesFrom": [],
      "memory": 128,
      "extraHosts": null,
      "dnsServers": null,
      "disableNetworking": null,
      "dnsSearchDomains": null,
      "portMappings": [
        {
          "hostPort": 0,
          "containerPort": 3000,
          "protocol": "tcp"
        }
      ],
      "hostname": null,
      "essential": true,
      "entryPoint": null,
      "mountPoints": [],
      "name": "node",
      "ulimits": null,
      "dockerSecurityOptions": null,
      "environment": [
        {
          "name": "awslogs-group",
          "value": "node_logs"
        },
        {
          "name": "awslogs-region",
          "value": "us-east-1"
        },
        {
          "name": "NODE_ENV",
          "value": "production"
        }
      ],
      "links": null,
      "workingDirectory": null,
      "readonlyRootFilesystem": null,
      "image": "562155596068.dkr.ecr.us-east-1.amazonaws.com/node:06b5a3700df163c8563865c2f23947c2685edd7b",
      "command": null,
      "user": null,
      "dockerLabels": null,
      "logConfiguration": {
        "logDriver": "awslogs",
        "options": {
          "awslogs-group": "node_logs",
          "awslogs-region": "us-east-1"
        }
      },
      "cpu": 1,
      "privileged": null,
      "memoryReservation": null
    }
  ],
  "placementConstraints": [],
  "volumes": [],
  "family": "node"
}

所有任务都已停止,目标组中的状态任务ELB运行状况检查失败。。。。健康检查通过2到3次后才开始失败。日志中除了http 200之外没有任何记录。

我使用的是旧版本的mongo驱动程序~2.0,并保持与多个db的连接。当我升级驱动程序时,问题就消失了

  "dependencies": {
    "mongodb": ">=2.2"
  }

我只能假设驱动程序中存在错误。

您是否尝试过使用与ECS任务配置完全相同的命令在本地运行它?谢谢@PaulBecotte-是,我现在刚刚试过-它已经运行了5分钟,没有问题。你能分享你的ECS任务定义吗?检查主机VM中的dmesg命令输出,以消除你应该看到的任何内存不足问题OOM@Robert你救了我的命。节点超出了任务定义的内存硬限制..: