protected void ExecProgram(string containerName, IDappApp dapApp) { var display = Environment.GetEnvironmentVariable("DISPLAY"); var args = Params(!dapApp.ExecProcess) | "exec"; dapApp.Flags?.Aggregate(args, (current, flag) => current | flag); AppendUserParam(args, dapApp.User); args = args | containerName | "sh" | "-c" | ( Params() + $"DISPLAY={display}" + $"{dapApp.Cmd}" ); if (dapApp.ExecProcess) { Exec(args); } else { Run( param: args, stdin: false, stdout: false, stderr: false ); } }
public bool RunApp(string path, IDappApp dapApp, ContainerConfig config, RunOptions options = RunOptions.None) { var name = new DirectoryInfo(path).Name; var containerName = GetContainerName(name); var imageName = GetImageName(name); var status = GetContainerStatus(containerName); if (options.HasFlag(RunOptions.NeedKill) && (status == ContainerStatus.Running)) { KillContainer(containerName); status = ContainerStatus.Stopped; } if (options.HasFlag(RunOptions.Recreate) || (status == ContainerStatus.Stopped)) { RemoveContainer(containerName); status = ContainerStatus.NotExists; } if (options.HasFlag(RunOptions.Rebuild) || (status == ContainerStatus.NotExists)) { Build(imageName, path, config.Vars, options.HasFlag(RunOptions.Optimize)); status = ContainerStatus.Running; RunContainer(containerName, config, name, imageName); status = ContainerStatus.Running; } if (status == ContainerStatus.Stopped) { var args = Params() | "start" | containerName; RunNow(args); status = ContainerStatus.Running; } if (status == ContainerStatus.Running) { ExecProgram(containerName, dapApp); } return true; }