AWS ECS 未打开所需端口

问题描述 投票:0回答:1

我正在尝试将一个简单的 FastAPI 应用程序作为 AWS ECS 中的任务运行。该 API 应该可以通过默认端口 8000 访问。不幸的是,我无法访问该端口。任务本身似乎正在运行,日志表明没有意外情况,并且安全组设置为接受所需端口上的流量。

根据 Cloudwatch,最后一个日志条目表明应用程序启动成功,并且 API 正在按预期侦听端口 8000,这让我相信任务本身正在按预期运行。

Cloudwatch shows API has started successfully.

底层 Dockerfile(使用 podman 构建)公开端口 8000,任务定义包括端口映射 8000 -> 8000。

网络模式为awsvpc。发射类型为fargate。

出于调试目的,我使用了一个安全组,该安全组允许来自所有 IP 地址的所有端口上的所有入站流量。启动一个由 AWS 提供的简单的“first-run-task-definition-task”,该任务与此安全组配合良好,并且在连接到端口 80 时,我看到了预期的消息。但对于我的 API 任务,使用此 SG 连接仍然失败。

SG should allow all traffic

为我的 API 任务运行

mmap -sV <task-public-ip>
表明我的 API 的公共 IP 地址没有开放端口,但它显示端口 80 对“first-run-task-definition-task”开放。

我在部署方面是否遗漏了什么?

amazon-web-services fastapi amazon-ecs
1个回答
0
投票

查看日志屏幕截图,我发现在 docker 容器中运行的 Uvicorn 服务仅绑定到

127.0.0.1
地址。因此,它目前仅接受来自同一 docker 容器中运行的其他事物或同一 ECS Fargate 任务中运行的其他容器的网络流量。

您需要修改容器的启动命令以指定主机地址

0.0.0.0
,以便服务能够接受来自任何地方的网络流量。看起来 this 可能是您正在使用的 docker 镜像。如果是这样,它会在文档中显示您需要在启动命令中指定主机:

CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]

请注意,这也会将端口更改为

80

© www.soinside.com 2019 - 2024. All rights reserved.