在ac#程序中创build/运行docker容器(在mono下)

我有一个经理程序在我的docker主机上分配资源来处理传入的请求。 我们想尝试把我们的一个C#进程closures到docker容器(现在在本地运行)。

我find了运行docker并调用我的c#程序的命令行:

/usr/bin/docker run -d -p 9001:9001 centos-foo /opt/mono/bin/mono /opt/prog/MyExe.exe --no-console --http_port 9001 

当我使用系统进程类和调用启动build立该命令时,它不起作用。 我的主机程序是在centos 6.5上的apache用户下运行的单声道c#。

 Process mProcess = new Process(); mProcess.StartInfo.FileName = "/usr/bin/docker"; mProcess.StartInfo.Arguments = " run -d -p " + mPort + ":" + mPort + " centos-foo /opt/mono/bin/mono " + mParameters.Get(AppParameterKeys.PROVIDER_EXE) + " --no-console --http_port " + mPort; mLog.Info("Starting ServiceProvider via command : " + mProcess.StartInfo.FileName + " " + mProcess.StartInfo.Arguments); mProcess.StartInfo.UseShellExecute = false; mProcess.StartInfo.CreateNoWindow = true; mProcess.StartInfo.UserName = "root"; mProcess.StartInfo.Password = mSecurePasswd; mProcess.StartInfo.WorkingDirectory = Path.GetDirectoryName(mParameters.Get(AppParameterKeys.PROVIDER_EXE)); mLog.Info("Starting ServiceProvider from directory : " + mProcess.StartInfo.WorkingDirectory); mProcess.EnableRaisingEvents = true; mProcess.Exited += OnProcessExited; if (mProcess.Start()) { mLog.Info("Start returned true"); } ... 

我意识到我可能有问题的退出callback,但现在它甚至不创builddocker集装箱。 我可以在log4net输出中看到完整的命令,如果我将它粘贴到命令行中,它将运行。

我把整个块封装在一个try/catch但是它不会抛出, start()返回true。 它只是不实际启动任何东西。

所以,我不确定我是否真正获得root权限来使用username/password startinfo运行username/password startinfo 。 我也不知道是否因为我的原始程序运行在单声道,如果它试图运行在单声道docker也是失败的。 我真的很困惑start()返回true,而不是抛出exception。

我现在正在调用docker的HTTP接口,但我宁愿使用这种机制来启动它。 我在这里失踪或做错了什么?