Mongodb 与 docker-compose - 创建用户
Posted
技术标签:
【中文标题】Mongodb 与 docker-compose - 创建用户【英文标题】:Mongodb with docker-compose - create user 【发布时间】:2020-07-11 16:59:49 【问题描述】:这是我的 docker-compose.yaml:
version: "2.0"
services:
mongo_container:
image: mongo:latest
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: example
MONGO_INITDB_DATABASE: testdb
ports:
- "27017:27017"
volumes:
- ./mongodata:/data/db
这在我的 spring 配置中:
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.username=root
spring.data.mongodb.password=example
spring.data.mongodb.database=testdb
但每次我尝试将我的应用程序连接到 Mongo 时,都会在 Docker 控制台中收到以下错误:
mongo_container_1 | 2020-03-31T07:37:24.803+0000 I ACCESS [conn2] SASL SCRAM-SHA-1 authentication failed for root on testdb from client 172.29.0.1:36628 ; UserNotFound: Could not find user "root" for db "testdb"
我做错了什么?
我尝试使用docker system prune
删除所有容器并再次运行它,但它仍然给出相同的错误。
【问题讨论】:
你试过to enable access control吗? 试试spring.data.mongodb.database=admin
【参考方案1】:
您需要在 application.properties 中添加以下行:
spring.data.mongodb.authentication-database=admin
From docker-hub mongodb readme:
MONGO_INITDB_ROOT_USERNAME,MONGO_INITDB_ROOT_PASSWORD
这些变量一起使用,创建一个新用户并设置 用户的密码。 此用户是在管理员认证中创建的 数据库并赋予root角色,这是一个“超级用户”角色。
对于数据库:
MONGO_INITDB_DATABASE 此变量允许您指定要使用的数据库的名称 用于 /docker-entrypoint-initdb.d/*.js ... MongoDB 中的创建脚本 基本上是为“首次使用创建”而设计的,所以如果你不这样做 使用您的 JavaScript 文件插入数据,然后不会创建数据库。
在 MongoDB 中,启用身份验证后,您总是针对特定数据库(默认为管理员)进行身份验证,然后连接并使用另一个数据库。 这就是为什么有两个不同的属性:authentication-database(用于进行身份验证)和 database(要使用的属性)
【讨论】:
以上是关于Mongodb 与 docker-compose - 创建用户的主要内容,如果未能解决你的问题,请参考以下文章
Springboot 应用程序无法使用 docker-compose 连接到 MongoDB 容器