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 容器

使用docker-compose安装启动单机MongoDB

mongodb的docker-compose.yml

docker-compose启动并使用MongoDB

docker-compose 构建mongodb并导入基础数据示例

docker-compose部署mongodb+redis遇到的问题