我使用MongoDB作为数据库创建了一个节点应用程序。我为它们创建了容器,并创建了一个docker compose文件。但是在将MongoDB与我的节点应用程序连接时,我收到了一个身份验证失败的错误。我想使用docker-compose将我的节点容器与MongoDB容器连接起来。我已经设置了所有凭据,但收到身份验证失败错误。
错误:
api | MongoError: Authentication failed.
api | at MessageStream.messageHandler (/home/app/node_modules/mongodb/lib/cmap/connection.js:272:20)
api | at MessageStream.emit (events.js:375:28)
api | at processIncomingData (/home/app/node_modules/mongodb/lib/cmap/message_stream.js:144:12)
api | at MessageStream._write (/home/app/node_modules/mongodb/lib/cmap/message_stream.js:42:5)
api | at writeOrBuffer (internal/streams/writable.js:358:12)
api | at MessageStream.Writable.write (internal/streams/writable.js:303:10)
api | at Socket.ondata (internal/streams/readable.js:726:22)
api | at Socket.emit (events.js:375:28)
api | at addChunk (internal/streams/readable.js:290:12)
api | at readableAddChunk (internal/streams/readable.js:265:9)
api | at Socket.Readable.push (internal/streams/readable.js:204:10)
api | at TCP.onStreamRead (internal/stream_base_commons.js:188:23) {
api | ok: 0,
api | code: 18,
api | codeName: 'AuthenticationFailed'
api | }
docker-compose.yml
version: "3.9"
services:
api:
restart: always
build:
context: ./server
dockerfile: Dockerfile.dev
container_name: api
volumes:
- /home/app/node_modules
- ./server:/home/app
ports:
- 8000:5000
depends_on:
- mongodb
environment:
NODE_ENV: ${NODE_ENV}
MONGO_URI: mongodb://${MONGO_ROOT_USERNAME}:${MONGO_ROOT_PASSWORD}@mongodb
networks:
- lib_api
mongodb:
image: mongo
restart: always
ports:
- 27017:27017
environment:
MONGO_INTIDB_ROOT_USERNAME: ${MONGO_ROOT_USERNAME}
MONGO_INTIDB_ROOT_PASSWORD: ${MONGO_ROOT_PASSWORD}
volumes:
- mongodb-data:/data/db
networks:
- lib_api
networks:
lib_api:
driver: bridge
volumes:
mongodb-data:
driver: local
.env
NODE_ENV=developement
MONGO_ROOT_USERNAME=niranjan
MONGO_ROOT_PASSWORD=password
DB_NAME=library
dbconfig.js
const mongoose = require("mongoose");
mongoose
.connect(process.env.MONGO_URI, {
dbName: process.env.DB_NAME,
useCreateIndex: true,
useNewUrlParser: true,
useUnifiedTopology: true,
useFindAndModify: false,
})
.then(() => console.log("database connected"))
.catch((err) => console.log(err));
试试这个mongodb uri:
MONGODB_URI='mongodb://root:1004@<your_mongo_service_name>/<your_db_Name>?authSource=admin&w=1'