2016-10-03 7 views
0

나는 Process을 사용하여 Neo4j Docker 이미지를 도킹합니다. 작업을 수행하기 전에 이미지가 올바르게 도킹되어 있는지 확인해야합니다. 여기에서 볼 수 있듯이 Docker Toolbox의 표준 출력을 프로세스 창으로 리디렉션하고 Docker Toolbox가 수행하는 작업에 관계없이 작업을 작성합니다. 그러나 이미지가 도킹 된 후에는 전혀 진행되지 않고 그 상태를 유지합니다. while 루프를 넘어서는 모든 코드는 실행되지 않습니다.reader.ReadLine() 이후 프로세스 창이 진행되지 않음

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 

이것은 프로세스 창입니다.

enter image description here

답변

1

컨테이너가 대화 형으로 실행이 분리되지. 루프는 스트림의 끝을 기다리고 있기 때문에 주 프로그램으로 돌아 가지 않습니다. 그러나 컨테이너가 실행되는 동안에는 stdinstdout에 연결되며 스트림이 끝나지 않습니다.

Docker CLI는 Docker Engine의 REST API에 명령을 보내어 작동합니다. 코드를 통해 컨테이너를 관리하려면 CLI를 생략하고 API를 직접 사용하는 것이 좋습니다. - the Docker.DotNet 프로젝트는 API에 대한 .NET 래퍼를 제공합니다.

+0

Github 페이지 이외에 다른 설명서 또는 자습서가 있습니까? 또한 해당 라이브러리에서 도커를 실행할 수 있습니까? – jmc