尝试从 Spring Boot Docker 容器连接到 mongo Docker 容器时验证 MongoCredential 时出错?

Posted

技术标签:

【中文标题】尝试从 Spring Boot Docker 容器连接到 mongo Docker 容器时验证 MongoCredential 时出错?【英文标题】:Error authenticating MongoCredential when trying to connect from spring boot docker container to mongo docker container? 【发布时间】:2020-07-21 09:31:54 【问题描述】:

我有以下docker compose 文件,用于连接到mongoDB containerSpring boot container

#
# APIs
#----------------------------------------------
  pokerstats:
    image: pokerstats
    container_name: pokerstats
    ports:
      - 8080:8080
    depends_on: 
      - db

#
# Utilities
#----------------------------------------------
  db:
    image: mongo
    container_name: mongo
    volumes:
      - ./database:/data
    ports:
      - "27017:27017"
    environment:
      MONGO_INITDB_ROOT_USERNAME: admin
      MONGO_INITDB_ROOT_PASSWORD: admin
      MONGO_INITDB_DATABASE: pokerStats  

在我的弹簧靴application.properties 我有:

server.port=8080
spring.main.allow-bean-definition-overriding=true

spring.data.mongodb.uri=mongodb://admin:admin@mongo:27017/pokerStats
spring.data.mongodb.authentication-database=admin
spring.data.mongodb.database=pokerStats

当我尝试使用 Postman 访问端点时,出现以下错误:


        "timestamp": "2020-04-07T17:39:19.129+0000",
        "status": 500,
        "error": "Internal Server Error",
        "message": "Exception authenticating MongoCredentialmechanism=SCRAM-SHA-1, userName='admin', source='pokerStats', password=<hidden>, mechanismProperties=<hidden>; nested exception is com.mongodb.MongoSecurityException: Exception authenticating MongoCredentialmechanism=SCRAM-SHA-1, userName='admin', source='pokerStats', password=<hidden>, mechanismProperties=<hidden>",
        "path": "/rounds"
    

请注意,在我将以下内容添加到我的 docker compose 文件之前,这一切正常:

 environment:
      MONGO_INITDB_ROOT_USERNAME: admin
      MONGO_INITDB_ROOT_PASSWORD: admin
      MONGO_INITDB_DATABASE: pokerStats  

【问题讨论】:

【参考方案1】:

我能够通过添加以下内容来解决问题:

application.properties:

spring.data.mongodb.uri=mongodb://admin:admin@mongo:27017/pokerStats?authSource=admin
spring.data.mongodb.authentication-database = admin
spring.data.mongodb.database=pokerStats

我相信:?authSource=admin 需要添加到 mongo uri 的末尾。

【讨论】:

【参考方案2】:

您的错误消息表明 authSource 是 pokerStats。但是根据我通过this找到的this,用户是在管理数据库中创建的。

所以,我假设这个配置不正确:

spring.data.mongodb.authentication-database=admin

我对spring数据不熟悉所以不知道如何正确配置。

【讨论】:

以上是关于尝试从 Spring Boot Docker 容器连接到 mongo Docker 容器时验证 MongoCredential 时出错?的主要内容,如果未能解决你的问题,请参考以下文章

无法从 Spring Boot Docker 容器连接到本地 MySQL 数据库服务器

无法从Spring Boot Docker容器连接到本地MySQL数据库服务器

无法从 Spring Boot Docker 容器连接 mysql Docker 容器

在 Docker 容器内运行 Spring Boot 应用程序,无法连接 MySQL

Docker:无法连接 Spring Boot 和 MYSQL

如何从不同的 docker 容器中读取 Spring Boot 应用程序属性?