通过docker打包的egg项目在centos7中不能连接数据库-数据库连接一直自动断开 disconnected
相关环境信息
- 操作系统:centos7 docker19.0.13
- Node 版本:node 12
- Egg 版本: { "ali-oss": "^6.10.0", "axios": "^0.19.2", "cos-nodejs-sdk-v5": "^2.7.0", "crypto-js": "^4.0.0", "egg": "^2.15.1", "egg-cors": "^2.2.3", "egg-logger": "^2.4.2", "egg-logger-sls": "^1.4.2", "egg-mongoose": "^3.3.1", "egg-scripts": "^2.13.0", "egg-sls": "^1.0.0-alpha.2", "qcloud-cos-sts": "^3.0.2", "shelljs": "^0.8.4" }
问题
- 通过docker打包成image的egg项目在服务器中运行不能连接到数据库,且找不到错误提示
- 整个报错就只有这个
disconnected 断开连接 图好像看不到
一直都是自动断开
- 一直重试链接数据库
尝试和检查
- 重启docker ,重启mongo ,重启centos --- 无效
- 检查docker内连接外网的畅通性 --- docker内ping外网,并在docker内node命令行连接数据库地址
- 检查mongo是否不可被连接 --- 已有在运行中的项目,连接畅通
- 检查mongo是否有设置白名单 --- mongo是任意ip都可访问
- 检查egg版本问题,检查项目的代码错误,尝试回退代码--- 无效
- 打包一个新的项目并连接数据库,成功,但是此项目就是不行
- 在egg中创建app.js 在启动时使用mongoose 直连数据库并读取数据成功,但是egg项目的配置文件中的egg-mongoose插件连接数据库失败
- 记不清楚还测试了哪些
以上,请项目方帮忙看看还有什么原因没有
因为是通过egg-mongoose 连接的数据库,直接导致项目启动失败
config 里配置的是啥?
config 里配置的是啥?
类似这样的
const userConfig = {
// myAppName: 'egg',
mongoose: {
client:{
url: `mongodb://${privateConfig.mongoDB.user}:${privateConfig.mongoDB.pwd}@${privateConfig.mongoDB.host}:${privateConfig.mongoDB.port}/${privateConfig.mongoDB.db}`,
options: { useUnifiedTopology: true, useNewUrlParser: true, useCreateIndex: true }
}
},
};
我记得之前有说 defaultDB 管用来着? 也是用这个mongoose.createConnection 方法创建的嘛?
我记得之前有说 defaultDB 管用来着? 也是用这个mongoose.createConnection 方法创建的嘛?
单独使用mongoose创建一个连接扔进去吗? 我试过了,感觉还是有问题,可能是我连接的方式有问题,
现在已经成功了
主要是配置参数里面的 options参数内的useUnifiedTopology: true
把这个删了就好了
莫名其妙的
不传报警告的也是它
后来查了一下说 数据库的版本和node包版本不匹配的时候就会报警告 但是也没有说不匹配利用这个消除警告会导致自动断开的情况
所以具体错误现在也不太明确
但是在最新的mongoose包中有明确说 版本更新后 删除了三种方法,可能是这个原因导致的
上面是图下面是原文
useUnifiedTopology 默认情况下,mongoose.connect()将打印出以下警告:
DeprecationWarning: current Server Discovery and Monitoring engine is deprecated, and will be removed in a future version. To use the new Server Discover and Monitoring engine, pass option { useUnifiedTopology: true } to the MongoClient constructor. Mongoose 5.7使用MongoDB驱动程序3.3.x,该驱动程序对监视副本集或分片群集中的所有服务器的方式进行了重大重构。用MongoDB的话来说,这就是 服务器发现和监视。
要选择使用新的拓扑引擎,请使用以下行:
mongoose.set('useUnifiedTopology', true); 该useUnifiedTopology选项删除了对不再与新拓扑引擎相关的多个连接选项的支持 :
autoReconnect reconnectTries reconnectInterval 启用时useUnifiedTopology,请从您mongoose.connect()或的 createConnection()电话中删除这些选项。
如果发现任何意外行为,请在GitHub上发布一个问题。
但是我没有具体查过
useUnifiedTopology: true
这个属性的问题比较多。 https://jira.mongodb.org/issues/?jql=text%20~%20%22useUnifiedTopology%22%20ORDER%20BY%20created%20DESC%2C%20cf%5B10855%5D%20DESC%2C%20cf%5B17250%5D%20ASC