使用Entity Framework与MongoDB遇版本兼容错误:容器Mongo8.0.3报Wire Version4
解决MongoDB驱动与服务器Wire Version不兼容问题
问题分析
报错提示服务器报告Wire Version为4(对应MongoDB 3.2版本),但你的容器实际运行的是MongoDB 8.0.3,核心原因是应用连接的并非容器内的MongoDB服务,而是本地另一个低版本MongoDB进程,或是容器服务未正确启动/映射端口。
解决步骤
1. 排查本地端口占用
确认27017端口是否被本地MongoDB服务占用:
- Windows:执行命令:
若结果显示非Docker进程的PID,结束对应进程或停止本地MongoDB服务:netstat -ano | findstr :27017net stop MongoDB - Linux/macOS:执行命令:
杀死占用端口的非Docker进程:lsof -i :27017kill -9 <PID>
2. 验证容器状态与版本
- 确认容器正常运行:
确保docker psmongo-db容器状态为Up,端口映射显示0.0.0.0:27017->27017/tcp。 - 进入容器验证MongoDB版本:
确认输出版本为8.0.3。docker exec -it mongo-db mongod --version
3. 重建容器(若上述步骤无效)
旧容器可能存在缓存问题,重新创建容器:
docker-compose down docker-compose up -d
4. 确认连接目标
用MongoDB客户端连接mongodb://localhost:27017,查看服务器版本:
mongo --eval "db.version()"
确保返回版本为8.0.3。
5. 检查驱动版本兼容性
若以上步骤都确认无误仍报错,检查项目NuGet包版本:
- 确保
MongoDB.EntityFrameworkCore和MongoDB.Driver为支持MongoDB 8.x的最新稳定版,在NuGet包管理器中更新这些包即可。
补充说明
Wire Version是MongoDB客户端与服务器的通信协议版本,8.0.3对应的Wire Version为21,远高于驱动要求的7。只要确保应用连接的是正确的容器服务,该错误即可解决。
内容的提问来源于stack exchange,提问作者Don Tomato
相关产品推荐
相关产品推荐

