Docker部署FastAPI+MySQL时出现2003错误无法连接127.0.0.1服务
Docker部署FastAPI连接MySQL报错2003问题解决
核心错误根因
你当前的报错是因为FastAPI中配置的数据库连接地址指向了app容器自身的127.0.0.1,而不是运行MySQL的db容器,再加上端口配置错误共同导致的,具体排查修改步骤如下:
1. 修改数据库连接地址
Docker Compose会为同一配置文件下的所有服务自动做内部DNS解析,你只需要把FastAPI中数据库配置的HOST地址从127.0.0.1改为db(和docker-compose里的MySQL服务名一致)即可。
如果你的数据库配置写在.env文件中,直接修改对应参数:
DB_HOST=db
2. 修正MySQL端口配置
MySQL默认监听容器内的3306端口,你当前的端口映射配置错误:
- 把docker-compose.yml中db服务的ports改为
"3307:3306"(宿主3307端口映射到容器3306端口) - FastAPI中的数据库PORT配置填
3306,直接走容器内部网络访问,不需要用宿主映射的3307端口
3. 处理MySQL启动延迟问题
depends_on只能保证db容器优先启动,但MySQL自身初始化需要数秒时间,可能app启动时数据库还未就绪:
- 方案1:在FastAPI的数据库连接逻辑中增加重试机制,连接失败后间隔2~3秒重试,最多重试5次
- 方案2:在app服务的启动命令中增加端口等待逻辑,示例如下:
services: app: # 原有配置保留,新增command配置 command: sh -c "sleep 5 && uvicorn main:app --host 0.0.0.0 --port 8000"
4. 清理无效配置
- 删除db服务environment中的空行
-,避免环境变量加载异常 - 删掉app服务的
links配置,该配置在新版Docker Compose中已废弃,不影响服务间通信 - docker-compose.yml的
version: '4'字段在当前新版Compose规范中已经不需要,可以直接删除
内容的提问来源于stack exchange,提问作者Raxz
相关产品推荐
相关产品推荐

