【问题标题】:Fargate task stops about 10s after is starts with no log outputFargate 任务在启动后大约 10 秒停止,没有日志输出
【发布时间】:2021-09-17 03:48:00
【问题描述】:

我的 Fargate 任务在启动后一直停止并且不输出任何日志(选择了 awslog 驱动程序)。

当我在本地执行 docker 时,容器确实启动并保持运行。

Docker 编写文件:

version: '2'
services:
  asterisk:
    build: .
    container_name: asterisk
    restart: always
    ports:
      - 10000-10099:10000-10099/udp
      - 5060:5060/udp

Dockerfile:

FROM debian:10.7

RUN {stuff-that-works-is-here}


# Keep Asterisk running in the foreground
ENTRYPOINT ["asterisk", "-f"]

# SIP port 
EXPOSE 5060:5060/udp

# RTP ports
EXPOSE 10000-10099:10000-10099/udp

我的任务执行角色拥有完整的 cloudwatch 访问权限以进行调试。

【问题讨论】:

    标签: amazon-web-services docker amazon-ecs amazon-cloudwatch aws-fargate


    【解决方案1】:

    点击 ECS 任务实例,展开容器部分,错误应该会显示在那里。我附上了它的屏幕截图。这是截图Screnshot

    【讨论】:

    【解决方案2】:

    仅 AWS 日志驱动程序是不够的。 不幸的是,Fargate 不会为您创建日志组,除非您告诉它

    Creating a log grouphttps://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_awslogs.html

    【讨论】:

      【解决方案3】:

      我遇到了类似的问题,原因是运行状况检查。

      ECS 没有针对 UDP 的健康检查,因此当您打开 UDP 端口时,如果您使用 Docker 进行部署(docker compose),它会创建一个指向 TCP 端口的健康检查,并且由于没有开放的 TCP 端口在该范围内,容器会因运行状况检查而自行重置。

      我必须向 docker-compose 添加一个自定义资源:

      x-aws-cloudformation:
        Resources:
          AsteriskUDP5060TargetGroup:
            Type: "AWS::ElasticLoadBalancingV2::TargetGroup"
            Properties:
              HealthCheckProtocol: TCP
              HealthCheckPort: 8088
      

      基本上,我对指向 TCP 端口的 UDP 端口进行了健康检查。当使用 Docker 进行部署时,绕过这个问题是一种“黑客”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-20
        • 2021-04-08
        • 1970-01-01
        • 2015-05-16
        • 1970-01-01
        • 2023-01-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多