繁体   English   中英

MongoError:使用 Docker 容器对 node.js 应用程序进行身份验证失败

[英]MongoError: Authentication failed for node.js app using Docker containers

我创建了一个使用 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

数据库配置文件

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'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM