You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EC2开放端口后外部IP仍无法访问FastAPI服务,求解决

解决外部无法访问EC2 Docker中FastAPI服务的问题

以下是你可能遗漏的关键配置步骤:

1. 修改Uvicorn绑定地址(最可能的核心原因)

Uvicorn默认仅监听容器内的127.0.0.1(localhost),即便Docker配置了端口映射,外部请求也无法穿透到服务。启动Uvicorn时必须指定绑定容器的所有网卡:

uvicorn main:app --host 0.0.0.0 --port 5000

这样服务会监听容器内所有IP,Docker的端口映射才能将外部请求转发到服务上。

2. 检查EC2实例本地防火墙

EC2实例(如Ubuntu系统)可能自带ufw防火墙,即使安全组开放了端口,本地防火墙仍可能拦截5000端口:

  • 查看防火墙状态:sudo ufw status
  • 若已启用,允许5000端口:sudo ufw allow 5000/tcp
  • 可临时关闭防火墙测试:sudo ufw disable(测试后按需重新开启)

3. 验证Docker端口映射有效性

在EC2主机上执行命令,确认容器端口映射是否正确绑定到主机的所有网卡:

sudo docker ps

查看容器的PORTS列,需显示0.0.0.0:5000->5000/tcp或:::5000->5000/tcp。如果显示127.0.0.1:5000->5000/tcp,说明端口映射仅绑定了主机localhost,外部无法访问,需重新启动容器并指定正确的端口映射:

sudo docker run --name <container_name> -p 0.0.0.0:5000:5000 -itd python:latest bash

4. 检查VPC网络ACL配置

若安全组配置正确但仍无法访问,需检查EC2所在子网的网络ACL:

  • 入站规则:允许TCP 5000端口的流量(或必要的全量流量)
  • 出站规则:允许所有响应流量(默认通常开放,若修改过需确认)

5. 验证EC2公网IP可达性

在你的VM上先测试EC2公网IP的连通性:

ping 3.17.184.122

如果ping不通,说明EC2公网IP本身不可达,需检查EC2是否分配了公网IP、是否处于公有子网中。

优先排查Uvicorn绑定地址的问题,这是此类场景下最常见的错误。

内容的提问来源于stack exchange,提问作者midav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 17:54:55