Docker运行FastAPI容器后访问127.0.0.1:8000提示无法连接如何解决
问题原因
核心错误出在Dockerfile的CMD启动参数配置:当前配置给uvicorn指定的监听地址是127.0.0.1,属于容器内部回环地址,仅对容器内部的localhost请求生效。哪怕配置了端口映射,宿主机、外部网络发过来的请求都会被拦截,无法到达服务进程,这也是添加-p 8000:8000启动参数、添加EXPOSE 8000配置依然访问失败的根本原因。
说明:
EXPOSE只是镜像的元信息标记,仅用于提示镜像使用者该服务默认占用的端口,不会产生任何实际的端口映射、网络配置修改效果,对连通性没有实际影响。
修复方案
- 修改Dockerfile中的CMD配置,将监听地址从
127.0.0.1改为0.0.0.0,修改后完整的CMD配置如下:
CMD [ "uvicorn","fast:app","--host","0.0.0.0","--port","8000" ]
- 重新构建镜像,执行命令:
docker build -t fastapi . - 启动容器时必须添加端口映射参数,将容器8000端口映射到宿主机端口,执行命令:
docker run -p 8000:8000 fastapi
验证方式
容器启动完成后,在本机浏览器访问http://localhost:8000,即可看到接口返回的{"Hello":"World"}响应;访问http://localhost:8000/docs可以查看FastAPI自动生成的交互式接口文档。
之前操作的问题说明
- 直接执行
docker run fastapi启动时未添加端口映射参数,Docker不会将容器内的8000端口绑定到宿主机,天然无法从宿主机访问容器内的服务 - 添加端口映射但服务绑定
127.0.0.1时,请求虽然能通过端口映射规则到达容器网络层,但服务仅监听回环地址,不会响应来自非回环地址的请求,依然会出现连接失败的问题
内容的提问来源于stack exchange,提问作者Talha Anwar
相关产品推荐
相关产品推荐

