2017-10-06 23 views
3

自动化测试,本地和构建服务器上,我试图旋转了一个副本集(我需要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标志传递。无论出于何种原因,这则阻止我连接到蒙戈容器:

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 : [email protected]/mongo/shell/mongo.js:237:13 @(connect):1:6 exception: connect failed

有谁在C#代码中执行的泊坞窗图像的命令的经验吗?


参考:这是一个很好的指导建立与码头工人一蒙戈副本集服务器,而是从命令行。 Docker Replica Set Setup

回答

0

原来,蒙戈具有使用--eval标志评价文本的方式。

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

解决方案:

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