简体   繁体   English

在 docker 上向 mongo db 验证用户

[英]authenticate user to mongo db on docker

I am trying to use docker in my existing project.我正在尝试在我现有的项目中使用 docker。 I have two extra services, redis and mongodb.我有两个额外的服务,redis 和 mongodb。 I am having issue on creating user and authenticating that user to able to use database.我在创建用户和验证该用户以使用数据库时遇到问题。 I don't want to do by running the container(docker exec -it...) and creating the user and grant the permission over there.我不想通过运行容器(docker exec -it...)并创建用户并在那里授予权限来做。 This way every developer has to do it on their machine.这样,每个开发人员都必须在他们的机器上进行。 Instead, I want to have script which runs when creating a mongodb image.相反,我希望在创建 mongodb 图像时运行脚本。

Here is how I am trying这是我正在尝试的方法

const {
  DATABASE_HOST,
  DATABASE_PORT,
  DATABASE_DBNAME,
  DATABASE_DBUSER,
  DATABASE_DBPASS,
} = require('../configs');

console.log('DATABASE', DATABASE_HOST);

db.createUser({
  user: DATABASE_DBUSER,
  pwd: DATABASE_DBPASS,
  roles: [
    {
      role: 'readWrite',
      db: DATABASE_DBNAME,
    },
  ],
});

docker-compose.yml docker-compose.yml

version: "3.7"

# Lets define all our services (i.e. our containers to run)
services:
    # create a mongodb database
    travel-db:
        image: mongo
        container_name: "travel-db"
        env_file:
            - ./.env
        volumes:
            - ./src/helpers/mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro
            - "mongodb:/data/db/"
        # opening mongodb port so that it can be connected from host
        ports:
            - "27017:27017"
    # create redis-server
    travel-redis-server:
        image: redis:latest
        container_name: "travel-redis-server"
        env_file:
            - ./.env
        volumes:
            - redis:/data/
        ports:
            - "6379:6379"

    # express app
    travel-express-server:
        image: "travel-express-server"
        container_name: "travel-express-server"
        env_file:
            - ./.env
        volumes:
            - .:/usr/src/app
        ports:
            - "8000:8000"

volumes:
    mongodb: {}
    redis: {}

I am getting following error我收到以下错误

在此处输入图像描述

UPDATE更新

i changed mongo-init.js to我将 mongo-init.js 更改为

db.createUser({
  user: 'traveluser',
  pwd: 'travel123',
  roles: [
    {
      role: 'readWrite',
      db: 'travel_db',
    },
  ],
});

it then says the following然后它说以下

Successfully added user: {
travel-db                |   "user" : "traveluser",
travel-db                |   "roles" : [
travel-db                |           {
travel-db                |                   "role" : "readWrite",
travel-db                |                   "db" : "travel_db"
travel-db                |           }
travel-db                |   ]
travel-db                | }

but still getting error on authentication但仍然在身份验证时出错

SASL SCRAM-SHA-1 authentication failed for traveluser on travel_db from client 172.20.0.4:36562; UserNotFound: Could not find user "traveluser" for db "travel_db"

if i use如果我使用

environment:
   - MONGO_INITDB_ROOT_USERNAME=admin
   - MONGO_INITDB_ROOT_PASSWORD=pass

and then comment the following -./src/helpers/mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro and change env variable with admin access then it works but not other than admin.然后评论以下-./src/helpers/mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro并使用管理员访问权限更改环境变量然后它可以工作但不是管理员。

require is not a function in the mongo shell. require不是 mongo shell 中的 function。 If you need to read javascript code from a file, use the load function.如果您需要从文件中读取 javascript 代码,请使用load function。

The user is likely being created in the wrong database.用户可能是在错误的数据库中创建的。 You can explicitly specify which database when creating:您可以在创建时明确指定哪个数据库:

db.getSiblingDB("travel_db").createUser({
  user: 'traveluser',
  pwd: 'travel123',
  roles: [
    {
      role: 'readWrite',
      db: 'travel_db',
    },
  ],
})

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

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