public void RunContainerExit0()
        {
            var command = "cmd /c exit";
            var cs      = new ContainerSettings
            {
                SandboxPath = sandbox.path,
                Layers      = sandbox.layers,
                KillOnClose = true,
                NetworkId   = HostComputeService.FindNatNetwork(),
            };

            using (var container = HostComputeService.CreateContainer(id.ToString(), cs))
            {
                container.Start();
                var si = new ProcessStartInfo
                {
                    CommandLine = command,
                    KillOnClose = false,
                };
                using (var process = container.CreateProcess(si))
                {
                    Assert.True(process.WaitForExit(10000), "Process did not exit after 10 seconds");
                    Assert.Equal(0, process.ExitCode);
                }
                container.Shutdown();
            }
        }
        public void ProcessKillOnCloseWithKillCannotHang()
        {
            var command = "powershell -c sleep 10000";
            var cs      = new ContainerSettings
            {
                SandboxPath = sandbox.path,
                Layers      = sandbox.layers,
                KillOnClose = true,
                NetworkId   = HostComputeService.FindNatNetwork(),
            };

            using (var container = HostComputeService.CreateContainer(id.ToString(), cs))
            {
                container.Start();
                var si = new ProcessStartInfo
                {
                    CommandLine = command,
                    KillOnClose = true,
                };
                var process = container.CreateProcess(si);
                process.Kill();
                Assert.True(Task.Factory.StartNew(() => { process.Dispose(); }).Wait(10000));
                container.Shutdown();
            }
        }
        public void ContainerKillOnCloseCannotHang()
        {
            var cs = new ContainerSettings
            {
                SandboxPath = sandbox.path,
                Layers      = sandbox.layers,
                KillOnClose = true,
                NetworkId   = HostComputeService.FindNatNetwork(),
            };
            var container = HostComputeService.CreateContainer(id.ToString(), cs);

            container.Start();
            Assert.True(Task.Factory.StartNew(() => { container.Dispose(); }).Wait(10000));
            Assert.ThrowsAny <Exception>(() => { HostComputeService.GetComputeSystem(id.ToString()); });
        }
        public HvContainer()
        {
            HcsFactory    hcsFactory   = new HcsFactory();
            IHcs          Hvhcs        = HcsFactory.GetHcs();
            DockerMonitor dockerLoader = new DockerMonitor();
            IList <ContainerListResponse> containerListResponses = dockerLoader.GetContainerListAsync().GetAwaiter().GetResult();

            foreach (ContainerListResponse c in containerListResponses)
            {
                Container container = HostComputeService.GetComputeSystem(c.ID);
                dockerLoader.GetContainerStats(c.ID).GetAwaiter().GetResult();
                //Console.WriteLine(perfInfo.memLimit);
                //Console.WriteLine(container.GetType().Name);

                //ContainerSettings containerSettings = new ContainerSettings();

                //Console.WriteLine(container.);
            }
        }
Ejemplo n.º 5
0
        static void Main(string[] args)
        {
            try
            {
                var parent  = args[0];
                var path    = args[1];
                var command = args[2];
                var id      = Guid.NewGuid();
                var layers  = new Layer[]
                {
                    new Layer {
                        Id = id, Path = parent
                    }
                };

                ContainerStorage.CreateSandbox(path, layers);
                try
                {
                    Console.Out.WriteLine("creating container");

                    var cs = new ContainerSettings
                    {
                        SandboxPath = path,
                        Layers      = layers,
                        KillOnClose = true,
                        NetworkId   = HostComputeService.FindNatNetwork(),
                    };
                    using (var container = HostComputeService.CreateContainer(id.ToString(), cs))
                    {
                        Console.Out.WriteLine("starting container");
                        Console.Out.Flush();
                        container.Start();
                        try
                        {
                            var si = new ProcessStartInfo
                            {
                                CommandLine            = command,
                                RedirectStandardOutput = true,
                                KillOnClose            = true,
                            };
                            using (var process = container.CreateProcess(si))
                            {
                                Console.Out.Write(process.StandardOutput.ReadToEnd());
                                process.WaitForExit(5000);
                                Console.Out.WriteLine("process exited with {0}", process.ExitCode);
                            }
                        }
                        finally
                        {
                            Console.Out.WriteLine("shutting down container");
                            container.Shutdown(Timeout.Infinite);
                        }
                    }
                }
                finally
                {
                    ContainerStorage.DestroyLayer(path);
                }
            }
            catch (Exception e)
            {
                Console.Out.WriteLine(e.Message);
                Console.Out.WriteLine(e.StackTrace);
                Environment.Exit(1);
            }
        }