Exception authenticating MongoDB при подключении с Java к Docker, проблема с MongoCredential, но из CLI все работает

У меня есть приложение, в котором я использую докер для поднятия базы данных Mongo. В Java я реализовываю это с помощью org.testcontainers. С другой стороны, я использую MongoClient, где я передаю MongoCredentials, для подключения к этой базе данных в докере. Я использую абсолютно одинаковые конфигурационные данные для настройки конфигурации докера и MongoCredential, но когда я пытаюсь использовать MongoClient каким-либо образом, я получаю что-то вроде

Exception authenticating MongoCredential{mechanism=SCRAM-SHA-1, userName='username', source='database', password=<hidden>, mechanismProperties=<hidden>} 

В то же время я пытаюсь взаимодействовать с MongoDB через командную строку, и с этим нет никаких проблем (естественно только в том случае, если я передаю правильные конфигурационные данные, что означает что сам докер сконфигурирован верно). Таким образом я настраиваю свой контейнер:

    private static final String MONGO_ENV_USERNAME = "MONGO_INITDB_ROOT_USERNAME";
    private static final String MONGO_ENV_PASSWORD = "MONGO_INITDB_ROOT_PASSWORD";
    private static final String MONGO_ENV_DATABASE = "MONGO_INITDB_DATABASE";

    private static final int MONGO_PORT = 27017;
    private static final String PATH_MONGO_PORT = "mongodb.port";

    private static final String CONTAINER_NAME = "mongo:latest";

 private GenericContainer<?> getMongoDbContainer(final GlobalConfiguration.Mongodb mongodb) {
        return new GenericContainer<>(DockerImageName.parse(CONTAINER_NAME))
                .withExposedPorts(MONGO_PORT)
                .withEnv(MONGO_ENV_USERNAME, mongodb.username())
                .withEnv(MONGO_ENV_PASSWORD, mongodb.password())
                .withEnv(MONGO_ENV_DATABASE, mongodb.database());
    }

И это конфигурация моего MongoClient:

@Configuration
public class MongoDBConfiguration {

    @Bean
    public MongoClient mongoClient(final GlobalConfiguration globalConfiguration,
                                   final MongoCredential mongoCredential) {
        GlobalConfiguration.Mongodb mongodb = globalConfiguration.mongodb();
        ServerAddress mongoAddress = new ServerAddress(mongodb.host(), mongodb.port());
        MongoClientOptions mongoClientOptions = MongoClientOptions.builder().build();
        return new MongoClient(mongoAddress, mongoCredential, mongoClientOptions);
    }

    @Bean
    public MongoCredential mongoCredential(final GlobalConfiguration globalConfiguration) {
        GlobalConfiguration.Mongodb mongodb = globalConfiguration.mongodb();
        return MongoCredential.createCredential(mongodb.username(),
                mongodb.database(),
                mongodb.password().toCharArray());
    }

}

То есть, по сути, я поднимаю докеровский контейнер указывая определенные проперти для аунтефикации и создаю клиент, который должен уметь конектится к базе в контейнере, используя те же проперти. Поставив брекпоинт в IDЕ перед каким-либо применение клиента я захожу в командную строку, передаю все те же проперти спокойненько работаю с базой, но клиент почему-то имея все те же проперти получает статус "Authentication failed". Что я делаю не так?


Ответы (0 шт):