使用Docker Compose创建MongoDB用户

6
这是我的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 命令删除所有容器,然后重新运行,但仍然出现相同的错误。


你尝试过启用访问控制吗? - Maroun
尝试使用 spring.data.mongodb.database=admin - Joe
1个回答

4
您需要在application.properties文件中添加以下行:
spring.data.mongodb.authentication-database=admin

来自docker-hub mongodb readme :

MONGO_INITDB_ROOT_USERNAME, MONGO_INITDB_ROOT_PASSWORD

这些变量一起使用,创建一个新用户并设置该用户的密码。此用户在管理认证数据库中创建,并被授予root角色,即“超级用户”角色。

对于数据库:

MONGO_INITDB_DATABASE 此变量允许您指定用于在/docker-entrypoint-initdb.d/*.js中创建脚本的数据库名称......MongoDB基本上是为“首次使用创建”的,因此如果您没有使用JavaScript文件插入数据,则不会创建任何数据库。

在MongoDB中,当启用身份验证时,您始终针对特定数据库(默认情况下为admin)进行身份验证,然后连接并使用另一个数据库。这就是为什么有两个不同的属性:authentication-database(要进行身份验证)和database(要使用的数据库)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接