ECS Fargate NGINX 容器未在 CloudWatch 日志中显示错误

lol*_*ter 5 nginx amazon-ecs amazon-cloudwatch docker aws-fargate

我的 nginx Dockerfile:

FROM nginx:1.15.12-alpine
RUN rm /etc/nginx/conf.d/default.conf
COPY ./nginx/nginx.conf /etc/nginx/conf.d

# Forward request logs to Docker log collector
RUN ln -sf /dev/stdout /var/log/nginx/access.log \
  && ln -sf /dev/stderr /var/log/nginx/error.log
EXPOSE 80
ENTRYPOINT ["nginx", "-g", "daemon off;"]
Run Code Online (Sandbox Code Playgroud)

我的 ECS 任务定义中的容器:

[
  {
    "name": "nginx",
    "image": "<ECR REPO HERE>",
    "networkMode": "awsvpc",
    "essential": true,
    "portMappings": [
      {
        "containerPort": 80,
        "protocol": "http"
      }
    ],
    "logConfiguration": {
      "logDriver": "awslogs",
      "options": {
        "awslogs-group": "mygroup",
        "awslogs-region": "us-east-1",
        "awslogs-stream-prefix": "nginx"
      }
    },
    "essential": true
  }
]
Run Code Online (Sandbox Code Playgroud)

然而,当部署任务时,它失败了,并且在 CloudWatch 中我看到以下内容:

在此输入图像描述

我对 ECS / Cloudwatch 非常陌生。如何从容器失败中看到 NGINX 错误?

GNO*_*EAT 3

  1. 你应该检查一下ECS_Execution_Role_Policy。它应该包含logs许可。喜欢 :
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecr:GetAuthorizationToken",
                "ecr:BatchCheckLayerAvailability",
                "ecr:GetDownloadUrlForLayer",
                "ecr:BatchGetImage",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "*"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)
  1. 您应该配置驱动ecs_agent程序的配置awslogs

该配置文件路径位于/etc/ecs/ecs.confighost.conf 中。这个文件应该是这样的:

ECS_CLUSTER=test_ecs_cluster
ECS_AVAILABLE_LOGGING_DRIVERS=["awslogs","json-file"]
Run Code Online (Sandbox Code Playgroud)

看 :

这是一个文件