Python请求Docker部署的FastAPI报ConnectionRefusedError错误原因是什么
Docker部署FastAPI服务连接拒绝问题排查
出现Connection refused错误通常由以下几种原因导致:
- 端口未正确映射
Dockerfile中的EXPOSE 50只是声明容器要使用50端口,不会自动将容器端口映射到宿主机。启动容器时必须添加端口映射参数,否则宿主机无法访问容器内的服务:
docker run -p 50:50 <你的镜像名称>
如果宿主机50端口被其他进程占用,可更换宿主机端口映射,比如映射到8080端口:
docker run -p 8080:50 <你的镜像名称>
- 请求地址填写错误
0.0.0.0是服务监听地址,代表容器内监听所有网卡的请求,不是可直接访问的目标地址。本地访问时需要将请求地址改为127.0.0.1或者localhost,对应修改请求代码:
import requests # 端口和映射的宿主机端口保持一致 resp = requests.get('http://127.0.0.1:50/') print(resp.json())
如果更换了宿主机映射端口,要同步修改请求地址中的端口号。
- 服务未完成启动就发起请求
你的服务启动时需要加载spacy的en_core_web_lg大模型,初始化依赖项也需要一定时间,容器刚启动就发起请求会因为服务未就绪被拒绝。可以等待10~20秒后再发起请求,或者在请求代码中增加重试逻辑。 - 端口占用或防火墙拦截
- 执行命令检查宿主机对应端口是否被占用:
- Linux环境:
netstat -tulpn | grep 50 - macOS环境:
lsof -i :50
- Linux环境:
- 跨设备访问时需要检查宿主机防火墙是否开放对应端口,云服务器还要检查安全组规则是否放行端口。
- 容器启动失败
执行docker ps查看容器是否处于运行状态,如果容器已经退出,执行docker logs <容器ID>查看服务启动日志,排查依赖缺失、代码报错等启动失败问题。
内容的提问来源于stack exchange,提问作者Kelly
相关产品推荐
相关产品推荐

