gpt4 book ai didi

C# Docker MongoDB 30000ms 后超时

转载 作者:行者123 更新时间:2023-12-02 20:37:12 27 4
gpt4 key购买 nike

我对 docker 相当陌生,并从中运行 mongo。但是,当我想写入它时遇到以下错误。当我纯粹在本地环境中使用 mongo(即本地运行 mongodb)时,这工作得非常好。

我在 docker-compose-test 文件中引用 mongo 的方式如下:

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 罗盘管理器连接到它,并且相应的密码和用户名,当我的 docker compose 未启动并运行时,它将无法连接,当它运行时,它工作正常。

也就是说,在我的代码中,我按如下方式引导我的 mongo 上下文:

// 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

我注意到它确实提到了“未指定”,我认为这是问题所在,但如果是的话,那么构建到 mongo 的连接字符串的正确方法是什么?我的理解如下:我们有我们的CTX,我们调用GetDatabase,如果它不存在,它将创建数据库,然后当我们调用GetCollection时,如果它不存在,它应该创建一个集合。我哪里错了?

最佳答案

使用 Docker compose 时,您应该使用“mongo”(compose 文件中的容器名称)而不是 localhost。我刚刚开始工作。

来源:https://medium.com/@kahana.hagai/docker-compose-with-node-js-and-mongodb-dbdadab5ce0a

关于C# Docker MongoDB 30000ms 后超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54660363/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com