【问题标题】:nodejs and mongodb authentication failednodejs和mongodb认证失败
【发布时间】:2020-09-24 01:03:52
【问题描述】:

我正在使用 docker、mongodb 和 nodejs (mongoose) 设置应用程序,但由于某种原因,我遇到了身份验证错误。

UserNotFound: 找不到用户 "testuserdb" 用于 db "admin"

有什么建议吗?

谢谢!

.env

MONGO_USERNAME=testuserdb
MONGO_PASSWORD=testuserpass
MONGO_PORT=27017
MONGO_DB=testdb

db.js(猫鼬连接)

const mongoose = require('mongoose');

const {
    MONGO_USERNAME,
    MONGO_PASSWORD,
    MONGO_HOSTNAME,
    MONGO_PORT,
    MONGO_DB
  } = process.env;

  const options = {
    useNewUrlParser: true,
    reconnectTries: Number.MAX_VALUE,
    reconnectInterval: 500,
    connectTimeoutMS: 10000,
  };

const url = `mongodb://${MONGO_USERNAME}:${MONGO_PASSWORD}@${MONGO_HOSTNAME}:${MONGO_PORT}/${MONGO_DB}?authSource=admin`;

mongoose.connect(url, options).then( function() {
    console.log('MongoDB is connected');
  })
    .catch( function(err) {
    console.log(err);
  });

码头工人撰写 我使用 docker 环境变量到 mongodb 和 nodejs 来定义用户名、密码、主机名 db 和数据库名

version: '3'

services:
  nodejs:
    build:
      context: .
      dockerfile: Dockerfile.dev
    depends_on: 
      - db
    image: nodejs
    container_name: nodejs
    restart: unless-stopped
    env_file: 
      - .env
    environment:
      - MONGO_USERNAME=$MONGO_USERNAME
      - MONGO_PASSWORD=$MONGO_PASSWORD
      - MONGO_HOSTNAME=db
      - MONGO_PORT=$MONGO_PORT
      - MONGO_DB=$MONGO_DB 
    ports:
      - "3000:3000"
    volumes:
      - .:/home/node/app
      - node_modules:/home/node/app/node_modules
    networks:
      - app-network
    #command: ./wait-for.sh db:27017 -- /home/node/app/node_modules/.bin/nodemon app.js
    command: /home/node/app/node_modules/.bin/nodemon app.js
  db:
    image: mongo:4.2.9-bionic
    container_name: db
    restart: unless-stopped
    env_file: 
      - .env
    environment: 
      - MONGO_INITDB_ROOT_USERNAME=$MONGO_USERNAME
      - MONGO_INITDB_ROOT_PASSWORD=$MONGO_PASSWORD
      - MONGO_INITDB_DATABASE=$MONGO_DB
    volumes:
      - dbdata:/data/db
    networks:
      - app-network
networks:
  app-network:
    driver: bridge
volumes:
  dbdata:
  node_modules:

【问题讨论】:

    标签: node.js mongodb docker docker-compose


    【解决方案1】:

    根据可用信息。我认为用户testuserdb 存在于testdb 而不是admin 数据库。

    在定义连接网址时,您提到了authSource=admin

    根据您的需要更改其中之一。

    【讨论】:

    • @Eduardo 你有机会试试这个吗?
    猜你喜欢
    • 2016-07-21
    • 2019-04-28
    • 2018-05-23
    • 1970-01-01
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 2015-05-06
    • 1970-01-01
    相关资源
    最近更新 更多