簡體   English   中英

MongoError:身份驗證失敗,docker-compose

[英]MongoError: Authentication failed with docker-compose

我正在嘗試構建此應用程序https://github.com/dwgebler/node-express-example 我想用它作為制作 Mongodb http 快遞服務器的模板。 我試圖在這個 repo 中構建 docker 撰寫文件,它看起來像這樣(稍作修改):

version: "3.8"
services:
  database:
    image: mongo
    container_name: mongo-database
    restart: always
    volumes:
      - "mongodata:/data/db"
    ports:
      - "27017:27017"
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: example
  mongo-express:    
    image: mongo-express
    container_name: mongo-express
    restart: always
    ports:
      - "8081:8081"
    environment:
      ME_CONFIG_MONGODB_ADMINUSERNAME: root
      ME_CONFIG_MONGODB_ADMINPASSWORD: example
      ME_CONFIG_MONGODB_SERVER: mongo-database
  web:
    image: node:16-alpine
    container_name: node-server
    restart: always
    user: "node"
    ports:
      - "9443:443"
    volumes:
      - "./app:/var/app/"
    working_dir: "/var/app"
    environment:
      NODE_ENV: dev
      DB_USER: root
      DB_PASSWORD: example
      DB_NAME: mongo-database
    command: "./wait.sh mongo-database 27017 'npm start'"
volumes:
  mongodata:

但是當我在與 docker-compose.yml 文件相同的目錄中運行命令 docker compose up -d 時,我在“節點服務器”容器日志中得到了這個:

Mongo started
MongoError: Authentication failed.
    at MessageStream.messageHandler (/var/app/node_modules/mongodb/lib/cmap/connection.js:272:20)
    at MessageStream.emit (node:events:513:28)
    at processIncomingData (/var/app/node_modules/mongodb/lib/cmap/message_stream.js:144:12)
    at MessageStream._write (/var/app/node_modules/mongodb/lib/cmap/message_stream.js:42:5)
    at writeOrBuffer (node:internal/streams/writable:391:12)
    at _write (node:internal/streams/writable:332:10)
    at MessageStream.Writable.write (node:internal/streams/writable:336:10)
    at Socket.ondata (node:internal/streams/readable:754:22)
    at Socket.emit (node:events:513:28)
    at addChunk (node:internal/streams/readable:315:12) {
  ok: 0,
  code: 18,
  codeName: 'AuthenticationFailed'
}

為什么我會收到 MongoError:身份驗證失敗? 請注意,我設置

DB_USER: root
DB_PASSWORD: example
DB_NAME: mongo-database

在 docker 文件的web部分中,它與數據庫部分中的MONGO_INITDB_ROOT_USERNAMEMONGO_INITDB_ROOT_PASSWORD匹配,我將DB_NAME設置為與數據庫部分名稱匹配的mongo-database 那么為什么不進行身份驗證呢?

MONGO_INITDB_ROOT_USERNAMEPASSWORD在 Mongo 管理數據庫中創建一個用戶。 您的連接字符串嘗試針對mongo-database數據庫進行身份驗證,但找不到用戶。 Mongo 日志中有消息告訴您這一點。

要修復它,您需要通過將authSource=admin添加到您的連接字符串來對 admin 數據庫進行身份驗證,如下所示

const uri = `mongodb://${process.env.DB_USER}:${process.env.DB_PASSWORD}@mongo-database/${process.env.DB_NAME}?retryWrites=true&writeConcern=majority&authSource=admin`;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM