I'm writing a spring boot web server which connects to a MongoDB (that runs in Docker). The connection seems to work but when I want to use operations on the DB I fail to connect due to an authentication error (code 18). I don't know why since when I access the DB via shell it works.
Application file
spring.data.mongodb.authentication-database=admin
spring.data.mongodb.username=rootuser
spring.data.mongodb.password=rootpass
spring.data.mongodb.database=databaseBA
spring.data.mongodb.port=27017
spring.data.mongodb.host=localhost
Docker Compose file (.yaml)
version: "3.8"
services:
  mongodb:
    image: mongo
    container_name: mongodb
    ports:
      - 27017:27017
    volumes:
      - data:/data
    environment:
      - MONGO_INITDB_ROOT_USERNAME=rootuser
      - MONGO_INITDB_ROOT_PASSWORD=rootpass
  mongo-express:
    image: mongo-express
    container_name: mongo-express
    restart: always
    ports:
      - 8081:8081
    environment:
      - ME_CONFIG_MONGODB_ADMINUSERNAME=rootuser
      - ME_CONFIG_MONGODB_ADMINPASSWORD=rootpass
      - ME_CONFIG_MONGODB_SERVER=mongodb
volumes:
  data: {}
networks:
  default:
    name: mongodb_network
Main Class
@SpringBootApplication
public class ServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ServerApplication.class, args);
    }
    @Bean
    CommandLineRunner runner(ParticipantRepository repository){
        return args -> {
            Participant participant = new Participant(
                    "token",
                    Gender.MALE,
                    StudyCourse.BIOPHYSICS
            );
            repository.insert(participant);
        };
    }
}
Error Message
2021-11-05 21:45:22.995  INFO 15700 --- [           main] o.s.s.web.DefaultSecurityFilterChain     : Will secure any request with [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@b46e103, org.springframework.security.web.context.SecurityContextPersistenceFilter@6a9cd0f8, org.springframework.security.web.header.HeaderWriterFilter@6d8796c1, org.springframework.security.web.csrf.CsrfFilter@53c1179a, org.springframework.security.web.authentication.logout.LogoutFilter@6a1d6ef2, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@7be2f29a, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@77dba4cd, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@2b0e9f30, org.springframework.security.web.session.SessionManagementFilter@3df1a1ac, org.springframework.security.web.access.ExceptionTranslationFilter@3382cf68, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@6198e9b5]
2021-11-05 21:45:23.110  INFO 15700 --- [           main] org.mongodb.driver.cluster               : Cluster created with settings {hosts=[localhost:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms'}
2021-11-05 21:45:23.178  INFO 15700 --- [localhost:27017] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:2, serverValue:146}] to localhost:27017
2021-11-05 21:45:23.178  INFO 15700 --- [localhost:27017] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:1, serverValue:147}] to localhost:27017
2021-11-05 21:45:23.180  INFO 15700 --- [localhost:27017] org.mongodb.driver.cluster               : Monitor thread successfully connected to server with description ServerDescription{address=localhost:27017, type=STANDALONE, state=CONNECTED, ok=true, minWireVersion=0, maxWireVersion=13, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=23309600}
2021-11-05 21:45:23.725  INFO 15700 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2021-11-05 21:45:23.735  INFO 15700 --- [           main] s.d.s.application.ServerApplication      : Started ServerApplication in 3.595 seconds (JVM running for 4.214)
2021-11-05 21:45:23.838  INFO 15700 --- [           main] org.mongodb.driver.connection            : Closed connection [connectionId{localValue:3}] to localhost:27017 because there was a socket exception raised by this connection.
2021-11-05 21:45:23.845  INFO 15700 --- [           main] ConditionEvaluationReportLoggingListener : 
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2021-11-05 21:45:23.870 ERROR 15700 --- [           main] o.s.boot.SpringApplication               : Application run failed
java.lang.IllegalStateException: Failed to execute CommandLineRunner
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:794) ~[spring-boot-2.5.6.jar:2.5.6]
    at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:775) ~[spring-boot-2.5.6.jar:2.5.6]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:345) ~[spring-boot-2.5.6.jar:2.5.6]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) ~[spring-boot-2.5.6.jar:2.5.6]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1332) ~[spring-boot-2.5.6.jar:2.5.6]
    at stachm.dbisbavlasjuk.server.application.ServerApplication.main(ServerApplication.java:16) ~[classes/:na]
Caused by: org.springframework.data.mongodb.UncategorizedMongoDbException: Exception authenticating MongoCredential{mechanism=SCRAM-SHA-1, userName='rootuser', source='admin', password=<hidden>, mechanismProperties=<hidden>}; nested exception is com.mongodb.MongoSecurityException: Exception authenticating MongoCredential{mechanism=SCRAM-SHA-1, userName='rootuser', source='admin', password=<hidden>, mechanismProperties=<hidden>}
    at org.springframework.data.mongodb.core.MongoExceptionTranslator.translateExceptionIfPossible(MongoExceptionTranslator.java:140) ~[spring-data-mongodb-3.2.6.jar:3.2.6]
    at org.springframework.data.mongodb.core.MongoTemplate.potentiallyConvertRuntimeException(MongoTemplate.java:2899) ~[spring-data-mongodb-3.2.6.jar:3.2.6]
    at org.springframework.data.mongodb.core.MongoTemplate.execute(MongoTemplate.java:555) ~[spring-data-mongodb-3.2.6.jar:3.2.6]
    at org.springframework.data.mongodb.core.MongoTemplate.insertDocument(MongoTemplate.java:1458) ~[spring-data-mongodb-3.2.6.jar:3.2.6]
    at org.springframework.data.mongodb.core.MongoTemplate.doInsert(MongoTemplate.java:1257) ~[spring-data-mongodb-3.2.6.jar:3.2.6]
    at org.springframework.data.mongodb.core.MongoTemplate.insert(MongoTemplate.java:1172) ~[spring-data-mongodb-3.2.6.jar:3.2.6]
    at org.springframework.data.mongodb.repository.support.SimpleMongoRepository.insert(SimpleMongoRepository.java:283) ~[spring-data-mongodb-3.2.6.jar:3.2.6]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
    at org.springframework.data.repository.core.support.RepositoryMethodInvoker$RepositoryFragmentMethodInvoker.lambda$new$0(RepositoryMethodInvoker.java:289) ~[spring-data-commons-2.5.6.jar:2.5.6]
    at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:137) ~[spring-data-commons-2.5.6.jar:2.5.6]
    at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:121) ~[spring-data-commons-2.5.6.jar:2.5.6]
    at org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:529) ~[spring-data-commons-2.5.6.jar:2.5.6]
    at org.springframework.data.repository.core.support.RepositoryComposition.invoke(RepositoryComposition.java:285) ~[spring-data-commons-2.5.6.jar:2.5.6]
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$ImplementationMethodExecutionInterceptor.invoke(RepositoryFactorySupport.java:599) ~[spring-data-commons-2.5.6.jar:2.5.6]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.12.jar:5.3.12]
    at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:163) ~[spring-data-commons-2.5.6.jar:2.5.6]
    at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:138) ~[spring-data-commons-2.5.6.jar:2.5.6]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.12.jar:5.3.12]
    at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:80) ~[spring-data-commons-2.5.6.jar:2.5.6]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.12.jar:5.3.12]
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) ~[spring-aop-5.3.12.jar:5.3.12]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.12.jar:5.3.12]
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215) ~[spring-aop-5.3.12.jar:5.3.12]
    at com.sun.proxy.$Proxy71.insert(Unknown Source) ~[na:na]
    at stachm.dbisbavlasjuk.server.application.ServerApplication.lambda$runner$0(ServerApplication.java:29) ~[classes/:na]
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:791) ~[spring-boot-2.5.6.jar:2.5.6]
    ... 5 common frames omitted
Caused by: com.mongodb.MongoSecurityException: Exception authenticating MongoCredential{mechanism=SCRAM-SHA-1, userName='rootuser', source='admin', password=<hidden>, mechanismProperties=<hidden>}
    at com.mongodb.internal.connection.SaslAuthenticator.wrapException(SaslAuthenticator.java:271) ~[mongodb-driver-core-4.2.3.jar:na]
    at com.mongodb.internal.connection.SaslAuthenticator.getNextSaslResponse(SaslAuthenticator.java:136) ~[mongodb-driver-core-4.2.3.jar:na]
    at com.mongodb.internal.connection.SaslAuthenticator.access$100(SaslAuthenticator.java:47) ~[mongodb-driver-core-4.2.3.jar:na]
    at com.mongodb.internal.connection.SaslAuthenticator$1.run(SaslAuthenticator.java:62) ~[mongodb-driver-core-4.2.3.jar:na]
    at com.mongodb.internal.connection.SaslAuthenticator$1.run(SaslAuthenticator.java:56) ~[mongodb-driver-core-4.2.3.jar:na]
    at com.mongodb.internal.connection.SaslAuthenticator.doAsSubject(SaslAuthenticator.java:278) ~[mongodb-driver-core-4.2.3.jar:na]
    at com.mongodb.internal.connection.SaslAuthenticator.authenticate(SaslAuthenticator.java:56) ~[mongodb-driver-core-4.2.3.jar:na]
    at com.mongodb.internal.connection.DefaultAuthenticator.authenticate(DefaultAuthenticator.java:53) ~[mongodb-driver-core-4.2.3.jar:na]
    at com.mongodb.internal.connection.InternalStreamConnectionInitializer.authenticate(InternalStreamConnectionInitializer.java:168) ~[mongodb-driver-core-4.2.3.jar:na]
    at com.mongodb.internal.connection.InternalStreamConnectionInitializer.initialize(InternalStreamConnectionInitializer.java:63) ~[mongodb-driver-core-4.2.3.jar:na]
    at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:144) ~[mongodb-driver-core-4.2.3.jar:na]
    at com.mongodb.internal.connection.UsageTrackingInternalConnection.open(UsageTrackingInternalConnection.java:51) ~[mongodb-driver-core-4.2.3.jar:na]
    at com.mongodb.internal.connection.DefaultConnectionPool$PooledConnection.open(DefaultConnectionPool.java:431) ~[mongodb-driver-core-4.2.3.jar:na]
    at com.mongodb.internal.connection.DefaultConnectionPool.get(DefaultConnectionPool.java:115) ~[mongodb-driver-core-4.2.3.jar:na]
    at com.mongodb.internal.connection.DefaultConnectionPool.get(DefaultConnectionPool.java:100) ~[mongodb-driver-core-4.2.3.jar:na]
    at com.mongodb.internal.connection.DefaultServer.getConnection(DefaultServer.java:96) ~[mongodb-driver-core-4.2.3.jar:na]
    at com.mongodb.internal.binding.ClusterBinding$ClusterBindingConnectionSource.getConnection(ClusterBinding.java:123) ~[mongodb-driver-core-4.2.3.jar:na]
    at com.mongodb.client.internal.ClientSessionBinding$SessionBindingConnectionSource.getConnection(ClientSessionBinding.java:135) ~[mongodb-driver-sync-4.2.3.jar:na]
    at com.mongodb.internal.operation.OperationHelper.withReleasableConnection(OperationHelper.java:621) ~[mongodb-driver-core-4.2.3.jar:na]
    at com.mongodb.internal.operation.MixedBulkWriteOperation.execute(MixedBulkWriteOperation.java:185) ~[mongodb-driver-core-4.2.3.jar:na]
    at com.mongodb.internal.operation.MixedBulkWriteOperation.execute(MixedBulkWriteOperation.java:76) ~[mongodb-driver-core-4.2.3.jar:na]
    at com.mongodb.client.internal.MongoClientDelegate$DelegateOperationExecutor.execute(MongoClientDelegate.java:187) ~[mongodb-driver-sync-4.2.3.jar:na]
    at com.mongodb.client.internal.MongoCollectionImpl.executeSingleWriteRequest(MongoCollectionImpl.java:1009) ~[mongodb-driver-sync-4.2.3.jar:na]
    at com.mongodb.client.internal.MongoCollectionImpl.executeInsertOne(MongoCollectionImpl.java:470) ~[mongodb-driver-sync-4.2.3.jar:na]
    at com.mongodb.client.internal.MongoCollectionImpl.insertOne(MongoCollectionImpl.java:453) ~[mongodb-driver-sync-4.2.3.jar:na]
    at com.mongodb.client.internal.MongoCollectionImpl.insertOne(MongoCollectionImpl.java:447) ~[mongodb-driver-sync-4.2.3.jar:na]
    at org.springframework.data.mongodb.core.MongoTemplate.lambda$insertDocument$16(MongoTemplate.java:1464) ~[spring-data-mongodb-3.2.6.jar:3.2.6]
    at org.springframework.data.mongodb.core.MongoTemplate.execute(MongoTemplate.java:553) ~[spring-data-mongodb-3.2.6.jar:3.2.6]
    ... 31 common frames omitted
Caused by: com.mongodb.MongoCommandException: Command failed with error 18 (AuthenticationFailed): 'Authentication failed.' on server localhost:27017. The full response is {"ok": 0.0, "errmsg": "Authentication failed.", "code": 18, "codeName": "AuthenticationFailed"}
    at com.mongodb.internal.connection.ProtocolHelper.getCommandFailureException(ProtocolHelper.java:175) ~[mongodb-driver-core-4.2.3.jar:na]
    at com.mongodb.internal.connection.InternalStreamConnection.receiveCommandMessageResponse(InternalStreamConnection.java:358) ~[mongodb-driver-core-4.2.3.jar:na]
    at com.mongodb.internal.connection.InternalStreamConnection.sendAndReceive(InternalStreamConnection.java:279) ~[mongodb-driver-core-4.2.3.jar:na]
    at com.mongodb.internal.connection.CommandHelper.sendAndReceive(CommandHelper.java:83) ~[mongodb-driver-core-4.2.3.jar:na]
    at com.mongodb.internal.connection.CommandHelper.executeCommand(CommandHelper.java:33) ~[mongodb-driver-core-4.2.3.jar:na]
    at com.mongodb.internal.connection.SaslAuthenticator.sendSaslStart(SaslAuthenticator.java:227) ~[mongodb-driver-core-4.2.3.jar:na]
    at com.mongodb.internal.connection.SaslAuthenticator.getNextSaslResponse(SaslAuthenticator.java:134) ~[mongodb-driver-core-4.2.3.jar:na]
    ... 57 common frames omitted
2021-11-05 21:45:24.344  INFO 15700 --- [           main] org.mongodb.driver.connection            : Closed connection [connectionId{localValue:4}] to localhost:27017 because there was a socket exception raised by this connection.
Process finished with exit code 1
So as you can see I try to add a document into the database via the command line runner-bean to test if I can use my db correctly. You can also see in the error message that the source and username should be correct but why does the password not match then. The Spring-Boot version is 2.5.6, jdk 11, MongoDB 5.0.3. (If I use mongo admin -u rootuser -p 'rootpass' on the shell it works...) If it's important I also show my model for the database:
Participant
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
@Getter
@Setter
@ToString
@Document("participant")
public class Participant {
    @Id
    private String subjectPseudonym;
    private String tokenID;
    private Gender gender;
    private StudyCourse studyCourse;
    public Participant(String tokenID, Gender gender, StudyCourse studyCourse) {
        this.tokenID = tokenID;
        this.gender = gender;
        this.studyCourse = studyCourse;
    }
}
Gender
public enum Gender {
    MALE, FEMALE, OTHER;
}
Courses (some German)
public enum StudyCourse {
    COGNITIVE_SYSTEMS,
    COMMUNICATION_AND_INFORMATION_TECHNOLOGY,
    ELEKTROTECHNIK,
    INFORMATIK,
    INFORMATIONSSYSTEMTECHNIK,
    KUENSTLICHE_INTELLIGENZ,
    LEHRAMT_GYMNASIUM,
    MEDIENINFORMATIK,
    PSYCHOLOGIE,
    SENSORSYSTEMTECHNIK,
    SOFTWARE_ENGINEERING,
    AKTUARWISSENSCHAFTEN,
    BUSINESS_ANALYTICS,
    COMPUTATIONAL_SCIENCE_AND_ENGINEERING,
    FINANCE,
    MATHEMATICAL_DATA_SCIENCE,
    MATHEMATIK,
    MATHEMATISCHE_BIOMETRIE,
    NACHHALTIGE_UNTERNEHMUNGSFUEHRUNG,
    WIRTSCHAFTSMATHEMATIK,
    WIRTSCHAFTSWISSENSCHAFTEN,
    ADVANCED_ONCOLOGY,
    HUMANMEDIZIN,
    MOLECULAR_AND_TRANSLATIONAL_NEUROSCIENCES,
    MOLEKULARE_MEDIZIN,
    ZAHNMEDIZIN,
    ADVANCED_MATERIALS,
    BIOCHEMIE,
    BIOLOGIE,
    BIOPHYSICS,
    CHEMICAL_ENGINEERING,
    CHEMIE,
    CHEMIEINGENIEURWESEN,
    ENERGY_SCIENCE_AND_TECHNOLOGY,
    INDUSTRIELLE_BIOTECHNOLOGIE,
    PHARMAZEUTISCHE_BIOTECHNOLOGY,
    PHYSIK,
    WIRTSCHAFTSCHEMIE,
    WIRTSCHAFTSPHYSIK,
    ANDERES
}
Repository
import org.springframework.data.mongodb.repository.MongoRepository;
public interface ParticipantRepository extends MongoRepository<Participant, String> {
}
 
     
    