FastAPI使用0.0.0.0启动时连接Docker MySQL报错如何解决
问题根因
0.0.0.0是仅用于服务端监听的特殊地址,表示监听当前主机所有可用网卡,不能作为客户端请求的目标连接地址使用。- 你在
database.py的数据库连接串中将MySQL地址写为0.0.0.0属于用法错误:uvicorn --host参数配置的是FastAPI服务的监听地址,和数据库连接的目标地址完全是两个配置项,不要混淆。 - 报错触发逻辑:当你用
127.0.0.1/localhost作为uvicorn监听地址时,Windows系统会自动将应用请求路由到本地回环栈,此时访问错写的0.0.0.0会被系统默认适配到本地回环地址,所以不会报错;当你用0.0.0.0作为uvicorn监听地址时,应用请求走物理网卡路由规则,0.0.0.0不属于合法的目标地址,就会抛出WinError 10049错误。 - 你使用的Docker启动命令已经配置了
-p 3306:3306,将容器端口映射到了宿主机所有网卡的3306端口,本身没有问题不需要调整。
解决方案
修改database.py中的数据库连接串,将MySQL地址替换为127.0.0.1或localhost即可:
# 修改前 engine = create_engine("mysql+pymysql://admin:1234@0.0.0.0:3306/dev") # 修改后 engine = create_engine("mysql+pymysql://admin:1234@127.0.0.1:3306/dev")
修改完成后再用uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload启动服务,即可同时实现对外暴露服务、正常连接本地Docker部署的MySQL的需求。
内容的提问来源于stack exchange,提问作者Seunghoon Schini Yang
相关产品推荐
相关产品推荐

