如何使用 FluentDocker 连接到 mongodb
Posted
技术标签:
【中文标题】如何使用 FluentDocker 连接到 mongodb【英文标题】:How to connect to mongodb using FluentDocker 【发布时间】:2021-11-29 03:48:12 【问题描述】:我正在尝试使用 FluentDocker 对 MongoDB 运行测试,但我无法连接到它,请参阅下面的代码。
[Fact]
public async Task TestMongoDbConnection3()
const string root = "root";
const string secret = "secret";
using (
var container =
new Builder().UseContainer()
.UseImage("mongo")
.WithEnvironment($"MONGO_INITDB_ROOT_USERNAME:root")
.WithEnvironment($"MONGO_INITDB_ROOT_PASSWORD:secret")
.ExposePort(27018)
.WaitForPort("27018/tcp", 30000 /*30s*/)
.Build()
.Start())
var config = container.GetConfiguration(true);
Assert.Equal(ServiceRunningState.Running, config.State.ToServiceState());
const string connectionString = "mongodb://root:secret@localhost:27018";
// insert data
const string collectionName = "Users";
var mongoClient = new MongoClient(connectionString);
var database = mongoClient.GetDatabase ("Users");
var collection = database.GetCollection<User>(collectionName);
const int id = 1;
var data = new Fixture().Build<User>()
.With(x => x.Id, id)
.Create();
// delete if exists, but got timeout after 30000 ms
await collection.DeleteOneAsync(x => x.Id == data.Id);
...
我尝试从配置 (config.NetworkSettings.IPAddress) 中替换 IP 的本地主机,但仍然超时。
有什么想法吗?
非常感谢,
【问题讨论】:
【参考方案1】:这里是修复 var ep = container.ToHostExposedEndpoint("27017/tcp");
在我的 macos 上本地运行时有效。
这里是完整的代码。在 docker-in-docker 映像上运行时它仍然会下降(超时)。
[Fact]
public void Test_Run_PingCommand_returns_True()
const string root = "root";
const string secret = "secret";
using (
var container =
new Builder().UseContainer()
.UseImage("mongo")
.WithEnvironment(new []$"MONGO_INITDB_ROOT_USERNAME=root",
$"MONGO_INITDB_ROOT_PASSWORD=secret")
.ExposePort(27017)
.WaitForPort("27017/tcp", 30000 /*30s*/)
.Build()
.Start())
var config = container.GetConfiguration(true);
Assert.Equal(ServiceRunningState.Running, config.State.ToServiceState());
var ep = container.ToHostExposedEndpoint("27017/tcp");
var connectionString =
$"mongodb://root:secret@ep";
var setting = new UsageDbSettings();
var mongoClient = new MongoClient(connectionString);
var database = mongoClient.GetDatabase(setting.DatabaseName);
var isMongoLive = database.RunCommandAsync((Command<BsonDocument>)"ping:1").Wait(30000);
Assert.True(isMongoLive);
【讨论】:
您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。以上是关于如何使用 FluentDocker 连接到 mongodb的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 impyla 连接到 impala 或使用 pyhive 连接到 hive?
如何使用 Mongodb 或 Mongoose 查询并使用 javascript 打印?
msSQL jdbc .. 我连接到服务器但如何连接到使用特定的 databaseName
如何在 python 上使用 presto 连接到 Azure 数据湖存储?
如何在不使用@符号连接到DB的情况下连接到DB。调用sqlplus UNAME @ DBNAME /密码@ \ Filelocation