EC2上用docker-compose部署FastAPI+Docker化Nginx无法访问排查
问题排查步骤
1. 检查EC2安全组配置
- 确认安全组入站规则开放了80端口(如果用Nginx默认端口)或者你配置的自定义端口,来源设为
0.0.0.0/0(测试用)或者你的固定IP - 顺便确认出站规则允许所有流量,避免容器通信异常
2. 验证容器端口映射是否正确
- 打开
docker-compose.yaml,检查Nginx服务的端口映射,比如是否是80:80(宿主机端口:容器端口),如果映射的是其他端口(比如8000),访问时要加端口号,比如http://EC2_IP:8000 - 执行
docker ps命令,看Nginx容器的PORTS列是否显示0.0.0.0:80->80/tcp,这说明端口已经正确映射到宿主机
3. 检查Nginx配置是否正确
- 打开
nginx_config.conf,确认反向代理地址是FastAPI服务的容器名(docker-compose自动创建的网络里,容器名可直接访问),比如:location / { proxy_pass http://fastapi-service:8000; # 这里的fastapi-service是docker-compose里FastAPI服务的service名称 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } - 确认
docker-compose.yaml里是否用volumes把本地的nginx_config.conf挂载到容器内的正确路径,比如/etc/nginx/conf.d/default.conf - 进入Nginx容器执行
nginx -t检查配置语法,命令:docker exec -it <nginx容器名> nginx -t
4. 测试EC2本地访问是否正常
- 在EC2实例上执行
curl http://localhost或者curl http://localhost:自定义端口,如果能返回FastAPI的响应,说明容器和宿主机映射没问题,问题出在EC2网络层面(安全组、防火墙) - 如果curl失败,就测试FastAPI服务本身:进入Nginx容器或其他容器,执行
curl http://fastapi-service:8000,确认服务能正常响应
5. 检查EC2本地防火墙
- 有些EC2实例开了
ufw或firewalld,执行sudo ufw status或者sudo firewall-cmd --list-all,确认目标端口已开放 - 如果端口没开放,执行
sudo ufw allow 80或者对应的firewalld命令开放端口
6. 确认EC2的公网IP是否正确
- 别把EC2的私有IP当成公网IP来访问,私有IP只能在VPC内部用,要去EC2控制台实例详情里找公网IPv4地址
内容的提问来源于stack exchange,提问作者Jekson
相关产品推荐
相关产品推荐

