我正在我的机器上运行一个节点和 mongodb docker 应用程序,但是当我尝试使用 moogose 连接到数据库时,它返回:
MongoError: Authentication failed.
at MessageStream.messageHandler (D:\Node\08-multi-dbb-mongodb\node_modules\mongodb\lib\cmap\connection.js:272:20)
at MessageStream.emit (events.js:223:5)
at processIncomingData (D:\Node\08-multi-dbb-mongodb\node_modules\mongodb\lib\cmap\message_stream.js:144:12)
at MessageStream._write (D:\Node\08-multi-dbb-mongodb\node_modules\mongodb\lib\cmap\message_stream.js:42:5)
at doWrite (_stream_writable.js:435:12)
at writeOrBuffer (_stream_writable.js:419:5)
at MessageStream.Writable.write (_stream_writable.js:309:11)
at Socket.ondata (_stream_readable.js:728:22)
at Socket.emit (events.js:223:5)
at addChunk (_stream_readable.js:309:12)
at readableAddChunk (_stream_readable.js:290:11)
at Socket.Readable.push (_stream_readable.js:224:10)
at TCP.onStreamRead (internal/stream_base_commons.js:181:23) {
ok: 0,
code: 18,
codeName: 'AuthenticationFailed',
name: 'MongoError'
}
这是我建立连接的方式: 文件名:mongodb.js
const mongoose = require('mongoose')
mongoose.connect('mongodb://user:password@localhost:27017/dbname',
{useNewUrlParser: true, useUnifiedTopology: true}, function (error){
if(!error) return;
console.log('Falha na conexao!', error)
}
)
const connection = mongoose.connection
connection.once('open', () => console.log('database rodando!!'))
我可以通过客户端(可视化界面)访问数据库,也可以通过终端连接数据库,例如
docker exec -it 347b053d4320 mongo -u user -p password --authenticationDatabase myDb
但是当我尝试运行 mongodb.js 文件的代码时,它返回错误。
如果你能出于好意帮助我。
谢谢!
答案 0 :(得分:0)
这完全取决于您从何处建立连接以及您的 Docker 配置是什么样的。
假设你在一个 Docker 容器中有 Mongo,在另一个 Docker 容器中有 NodeJS。
如果您从 NodeJS 进行连接,那么 Mongo 不会在本地主机上运行。
再次从 NodeJS 的角度来看,Mongo 不是在 localhost 上运行,而是在 docker-compose 中的服务上运行
示例
version: '3.7'
services:
myapp:
image: img_myapp:latest
build:
context: ./build/
container_name: myapp
depends_on:
- database
ports:
- "8091:80"
networks:
- myapp-network
database:
image: 'mongo'
container_name: 'mongo'
environment:
MONGO_INITDB_DATABASE: mydb
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: root
ports:
- "27999:27017"
logging:
driver: "json-file"
options:
max-size: "200k"
max-file: "10"
volumes:
- ./database:/data/db
networks:
- myapp-network
networks:
myapp-network:
在上面的配置中你连接到 mongodb://root:root@database:27999/mydb
在这种情况下,如果 mongo-container 发布了它的端口,你就可以连接到 localhost。它在上面的 yml 中做了什么:端口 27999