通过 docker 连接时 Mongodb 身份验证失败

问题描述 投票:0回答:1
version: '3.8' 

services:
  mongodb:
    image: mongo
    container_name: mongodb-server
    environment:
      - MONGO_INITDB_ROOT_USERNAME=athul
      - MONGO_INITDB_ROOT_PASSWORD=athul
    volumes:
      - ~/mongo/data:/data/db
    networks:
      - backend-ecom
  
  backendapi:
    image: athulmekkoth/backend:v3
    container_name: backend-server 
    ports:
      - "5000:5000"  
    networks:
      - backend-ecom  
    env_file:
      - .env
    depends_on:
      - mongodb

networks:
  backend-ecom:
    driver: bridge

嘿,这一切都是我的 docker compose 文件,当我尝试连接到 Mongodb 时,我收到错误如下

MongoServerError: not authorized on test to execute command { find: "users", filter: { email: "[email protected]" }, projection: {}, limit: 1, singleBatch: true, batchSize: 1, lsid: { id: UUID("335d544a-5e1c-427e-b6ac-a961a3bf4726") }, $db: "test" }        
backend-server  |     at Connection.onMessage (/app/node_modules/mongodb/lib/cmap/connection.js:227:30)
backend-server  |     at MessageStream.<anonymous> (/app/node_modules/mongodb/lib/cmap/connection.js:60:60)
backend-server  |     at MessageStream.emit (node:events:517:28)
backend-server  |     at processIncomingData (/app/node_modules/mongodb/lib/cmap/message_stream.js:125:16)
backend-server  |     at MessageStream._write (/app/node_modules/mongodb/lib/cmap/message_stream.js:33:9)
backend-server  |     at writeOrBuffer (node:internal/streams/writable:392:12)
backend-server  |     at _write (node:internal/streams/writable:333:10)
backend-server  |     at Writable.write (node:internal/streams/writable:337:10)
backend-server  |     at Socket.ondata (node:internal/streams/readable:809:22)
backend-server  |     at Socket.emit (node:events:517:28)
backend-server  |     at addChunk (node:internal/streams/readable:368:12)
backend-server  |     at readableAddChunk (node:internal/streams/readable:341:9)
backend-server  |     at Readable.push (node:internal/streams/readable:278:10)
backend-server  |     at TCP.onStreamRead (node:internal/stream_base_commons:190:23) {        
backend-server  |   ok: 0,
backend-server  |   code: 13,
backend-server  |   codeName: 'Unauthorized',
backend-server  |   [Symbol(errorLabels)]: Set(0) {}
backend-server  | }

我通过

连接到mongodb
const connect=()=>{
mongoose.connect(`mongodb://athul:athul@mongodb-server:27017/test`).then(() => {
    console.log("connected to db");
})
.catch((err) => {
    console.log("not connected to db", err);
});

}

请忽略我直接在连接字符串中使用密码和用户名的方式。任何帮助将不胜感激,谢谢

node.js mongodb docker
1个回答
0
投票

默认情况下,MongoDB root 用户只能访问管理数据库。因此,如果您需要访问测试数据库,您需要创建一个用户并授予测试数据库的权限。

所以:

  1. 登录MongoDB

docker exec -it mongodb-server mongo -u athul -p athul --authenticationDatabase admin

  1. 创建一个有权访问测试数据库的用户:
db = db.getSiblingDB("test");
db.createUser({
    user: "athul",
    pwd: "athul",
    roles: [{ role: "readWrite", db: "test" }]
});
  1. 更新您的 docker-compose 文件(更改凭据并添加 init 脚本)
© www.soinside.com 2019 - 2024. All rights reserved.