C # Docker MongoDB Тайм-аут после 30000 мс - PullRequest
0 голосов
/ 13 февраля 2019

Я довольно новичок в докере и запускаю монго из него.Однако я сталкиваюсь со следующей ошибкой, когда хочу написать в нее.Это прекрасно работает, когда я использую 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, она должна создать коллекцию, если она не существует.Где я ошибся?

1 Ответ

0 голосов
/ 14 июня 2019

Вы должны использовать 'mongo' (имя контейнера из вашего файла compose) вместо localhost при использовании Docker compose.Я только что заработал.

Источник: https://medium.com/@kahana.hagai/docker-compose-with-node-js-and-mongodb-dbdadab5ce0a

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...