AWS EC2实例Docker部署API请求超时及无200状态码求助
排查EC2上Docker API请求超时/无200响应的实用步骤
1. 先盯紧Docker端口映射(新手高频坑)
- 登录EC2,执行
docker ps查看容器的PORTS列,必须是0.0.0.0:主机端口->容器内API端口/tcp格式(比如0.0.0.0:80->8000/tcp)。如果只显示8000/tcp,说明没把容器端口绑定到EC2主机,外界根本无法访问。 - 映射错误的话,重新启动容器并添加
-p 主机端口:容器内端口参数,例如API在容器内跑8000、对外用80端口,命令为docker run -p 80:8000 你的镜像名
2. 检查EC2主机本地防火墙
- 执行
sudo iptables -L,或若安装了ufw则执行sudo ufw status,确认你使用的主机端口(如80、443)允许入站流量。 - 若被拦截,直接添加规则:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT(对应80端口);用ufw的话则执行sudo ufw allow 80/tcp
3. 抠细节检查EC2安全组
- 别只说开了HTTP/HTTPS,需确认:
- 入站规则的来源为0.0.0.0/0(测试阶段全开放,后续可锁定自身IP),避免误设为内网IP段。
- 规则的目标端口是你映射的主机端口(如80、443),而非容器内的端口。
- 安全组确实绑定到当前EC2实例,勿绑定错误机器。
4. 先在EC2内部测试API可用性
- 登录EC2后,执行
curl -X POST http://localhost:主机端口/你的API接口路径,查看是否能拿到200响应。 - 若内部都无法访问,问题出在API本身或容器配置:比如API未启动成功,或容器内API监听的是
127.0.0.1(需改为0.0.0.0才能让容器外访问)。
5. 排查VPC网络配置
- 确认EC2处于公有子网(子网已关联互联网网关),若在私有子网,需配置NAT网关才能对外提供服务。
- 检查实例的公网IP是否为当前有效IP,临时公网IP会随实例重启变更,避免使用错误的IP/DNS。
6. 本地测试网络连通性
- 本地执行
ping 你的EC2公网IP,能通说明基础网络正常;ping不通则回头排查安全组和子网配置。 - 执行
telnet 你的EC2公网IP 主机端口,能建立连接说明端口已开放;若连不上,仍需排查端口开放相关配置。
内容的提问来源于stack exchange,提问作者Marcus Daniel
相关产品推荐
相关产品推荐

