我使用Process
对接Neo4j Docker图像。我需要确保图像在对其执行操作之前正确停靠。正如您在此处所看到的,我将Docker Toolbox中的标准输出重定向到我的Process窗口并写入Docker Toolbox正在执行的操作。但是,在图像停靠后,它根本不会继续并保持该状态。超出while循环的所有代码都不会执行。
ProcessStartInfo psi = new ProcessStartInfo();
psi.WindowStyle = ProcessWindowStyle.Normal;
psi.FileName = ConfigurationManager.AppSettings["Bash"];
psi.WorkingDirectory = ConfigurationManager.AppSettings["ToolBox"];
psi.Arguments = BuildArgumentString();
psi.UseShellExecute = false;//set to false to redirect standard output
psi.RedirectStandardOutput = true;
Process process = Process.Start(psi);
StreamReader reader = process.StandardOutput;
while (!reader.EndOfStream)
{
Console.WriteLine(reader.ReadLine());
}
//codes beyond this while loop is not executed
这是流程窗口。
答案 0 :(得分:1)
您的容器以交互方式运行,而不是分离。循环不会返回主程序,因为它正在等待流的结束 - 但只要运行它的容器将连接到stdin
和{{ 1}}并且流不会结束。
Docker CLI的工作原理是向Docker Engine的REST API发送命令。如果您通过代码管理容器,最好绕过CLI并直接使用API - the Docker.DotNet项目为API提供.NET包装。