如果日志显示服务已启动,为什么我的 ECS 任务公共 IP 未加载?

ark*_*k0n 10 python ip-address amazon-web-services amazon-ecs flask

我正在尝试将一个超级简单的容器化烧瓶应用程序部署到 ECS。我知道该映像是docker-compose可用的并且构建得很好,因为我将它作为 CodePipeline 的一部分,该 CodePipeline 正在构建、标记并将最终的 docker 映像推送到 ECR。

Build completed on Sat Feb 15 21:48:44 UTC 2020

[Container] 2020/02/15 21:48:44 Running command echo Pushing the Docker images...
Pushing the Docker images...

[Container] 2020/02/15 21:48:44 Running command docker push $REPOSITORY_URI:latest
...
025f20c0831b: Pushed
98e916abdf11: Pushed
Run Code Online (Sandbox Code Playgroud)

此时我可能应该澄清该应用程序在本地运行,并且我已将主机指定app.run()0.0.0.0.

此时我已经有了一个ECS集群

在此输入图像描述

具有正在运行的任务和公共 IP

在此输入图像描述

以及指示应用程序已启动的日志。

在此输入图像描述

我还修改了安全组的入站端口以包括0.0.0.0,上的 5000 ::/0

在此输入图像描述

从理论上讲,这意味着您应该能够访问端口3.80.1.115,但您应该看到标准,您甚至从浏览器中输入了响应内容。

在此输入图像描述

我只是不确定发生了什么,因为我看起来很接近...应用程序在 ECS 中运行没有错误,一切都很棒,除了应用程序无法访问。想法?

pab*_*xio 2

也许您应该检查ECS 任务定义的networkMode和设置。portMappings

在安全组中,您允许该端口的流量TCP/80,但我可以在您的应用程序日志 () 中读到Running on http://0.0.0.0:5000/您的应用程序正在不同的端口中运行TCP/5000

以下是监听 por 的 Nginx 任务的示例TCP/80

{
  "requiresCompatibilities": [
    "FARGATE"
  ],
  "containerDefinitions": [
    {
      "name": "nginx",
      "image": "nginx:latest",
      "memory": 256,
      "cpu": 256,
      "essential": true,
      "portMappings": [
        {
          "containerPort": 80,
          "protocol": "tcp"
        }
      ],
      "logConfiguration":{
            "logDriver":"awslogs",
            "options":{
               "awslogs-group":"awslogs-nginx-ecs",
               "awslogs-region":"us-east-1",
               "awslogs-stream-prefix":"ecs"
            }
      }
    }
  ],
  "volumes": [],
  "networkMode": "awsvpc",
  "placementConstraints": [],
  "family": "nginx",
  "memory": "512",
  "cpu": "256"
}
Run Code Online (Sandbox Code Playgroud)

您可以在此处查看其他示例