Я довольно новичок в докере и запускаю монго из него.Однако я сталкиваюсь со следующей ошибкой, когда хочу написать в нее.Это прекрасно работает, когда я использую mongo исключительно в локальной среде (то есть, запускаю mongodb локально).
То, как я ссылаюсь на монго в моем файле docker-compose-test, выглядит следующим образом:
mongo:
image: mongo
restart: always
ports:
- 27017:27017
environment:
MONGO_INITDB_ROOT_USERNAME: username
MONGO_INITDB_ROOT_PASSWORD: password
Затем в моем файле appsettings.config я установил строку подключения следующим образом:
"MongoConnectionString": "mongodb://username:password@localhost:27017"
Стоит отметить, что я весьма уверен, что это действительно раскручивает его экземпляр с этими учетными данными, потому что, если я пытаюсь подключиться к нему, используя администратор компаса Mongo с хостомlocalhost, и соответствующий пароль и имя пользователя, когда мой docker compose не запущен и не работает, тогда он не сможет подключиться, когда он работает, он работает нормально.
Тем не менее, в моем коде я загружаю свой контекст монго следующим образом:
//Create mongo class map
Mapper.CreateMaps();
string connectionString = configuration.GetValue<string>("ConnectionStrings:MongoConnectionString");
string mongoDataBase = configuration.GetValue<string>("MongoDataBases:MongoDataBaseName");
_client = new MongoClient(connectionString);
_database = _client.GetDatabase(mongoDataBase);
И затем я пытаюсь вставить данные, которые я хочу, в мою коллекцию (где она терпит неудачу) какследует:
//GetTypedMongoCollection returns a IMongoCollection<T>
var collection = mongoContext.GetTypedMongoCollection<MyCollection>();
Сообщение об ошибке:
A timeout occured after 30000ms selecting a server using CompositeServerSelector{ Selectors = MongoDB.Driver.MongoClient+AreSessionsSupportedServerSelector, LatencyLimitingServerSelector
{ AllowedLatencyRange = 00:00:00.0150000 } }. Client view of cluster state is { ClusterId : "1", ConnectionMode : "Automatic", Type : "Unknown", State : "Disconnected",
Servers : [{ ServerId: "{ ClusterId : 1, EndPoint : "Unspecified/localhost:27017" }", EndPoint: "Unspecified/localhost:27017", State: "Disconnected", Type: "Unknown", HeartbeatException: "MongoDB.Driver.MongoConnectionException: An exception occurred while opening a connection to the server. ---> MongoDB.Driver.MongoAuthenticationException: Unable to authenticate using sasl protocol mechanism SCRAM-SHA-1. ---> MongoDB.Driver.MongoCommandException: Command saslStart failed: Authentication failed
Я замечаю, что в нем упоминается «Не указано», что, как я полагаю, является проблемой, но если это так, то этоправильный способ построить мою строку подключения к Монго?Поскольку я понимаю следующее: у нас есть CTX, мы вызываем GetDatabase, который создаст БД, если она не существует, а затем, когда мы вызываем GetCollection, она должна создать коллекцию, если она не существует.Где я ошибся?