Окно обработки не выполняется после reader.ReadLine()

#c# #docker #process #neo4j #processstartinfo

#c# #docker #процесс #neo4j #processstartinfo

Вопрос:

Я использую стыковочные изображения Neo4j Docker Process . Мне нужно убедиться, что изображения закреплены правильно, прежде чем выполнять с ним операции. Как вы можете видеть здесь, я перенаправляю стандартный вывод из Docker Toolbox в мое окно процесса и записываю в него все, что делает 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
  

Это окно процесса.

введите описание изображения здесь

Ответ №1:

Ваш контейнер работает в интерактивном режиме, а не отсоединен. Цикл не вернется к основной программе, потому что он ожидает окончания потока, но пока контейнер запущен, он будет подключен к stdin и stdout и поток не закончится.

CLI Docker работает путем отправки команд в REST API Docker Engine. Если вы хотите управлять контейнерами с помощью кода, было бы лучше обойти CLI и использовать API напрямую — Docker.Проект DotNet предоставляет оболочку .NET для API.

Комментарии:

1. Есть ли какая-либо другая документация или учебные пособия, кроме страницы Github? Кроме того, возможно ли запустить docker в этой библиотеке?