[英]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.