gpt4 book ai didi

c# - 使用副本集启动 Docker Mongo

转载 作者:可可西里 更新时间:2023-11-01 09:54:03 25 4
gpt4 key购买 nike

对于本地和构建服务器上的自动化测试,我正在尝试使用副本集启动一个 mongo 图像(我需要 oplog)。

副本集设置要求我进入 mongo shell 并调用“rs.initiate()”。我希望这一切都在代码中完成。

public void SpinUpMongoWithReplicaSet()
{
Process.Start("docker", "run -p 123:27017 --name test_mongo -d mongo:latest mongod --replSet rs0").WaitForExit();

var replicaSetProcess = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "docker",
Arguments = "exec -it test_mongo mongo",
UseShellExecute = false,
RedirectStandardInput = true
}
};

replicaSetProcess.Start();

using(StreamWriter writer = replicaSetProcess.StandardInput)
{
writer.WriteLine("rs.initiate()");
writer.WriteLine("exit");
}

replicaSetProcess.WaitForExit();
}

但是docker exec命令的问题。

当传入 -it 或只是 -t 时,出现以下错误:

the input device is not a TTY. If you are using mintty, try prefixing the command with 'winpty'

我能找到的唯一解决方案是只传递 -i 标志。无论出于何种原因,这都会阻止我连接到 mongo 容器:

MongoDB shell version v3.4.9 connecting to: mongodb://127.0.0.1:27017 2017-10-06T18:25:06.765+0000 W NETWORK [thread1] Failed to connect to 127.0.0.1:27017, in(checking socket for error after poll), reason: Connection refused 2017-10-06T18:25:06.765+0000 E QUERY [thread1] Error: couldn't connect to server 127.0.0.1:27017, connection attempt failed : connect@src/mongo/shell/mongo.js:237:13 @(connect):1:6 exception: connect failed

有没有人有在 C# 代码中对 docker 镜像执行命令的经验?


供引用:这是使用 docker 设置 mongo 副本集服务器的一个很好的指南,但是是从命令行进行的。 Docker Replica Set Setup

最佳答案

事实证明,Mongo 有一种使用 --eval 标志评估文本的方法。

这使我们可以避免同时使用 -i-t 标志。以这种方式,Process.Start() 函数就足够了。

解决方法:

Process.Start("docker", "exec test_mongo mongo --eval \"rs.initiate()\"").WaitForExit();

关于c# - 使用副本集启动 Docker Mongo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46613262/

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