Esempio n. 1
0
        public static async Task <DockerNetwork> CreateNewNetwork(ILogger logger, Docker.DotNet.DockerClient docker, CancellationToken cancellationToken)
        {
            try
            {
                var createNetworkParams = new Docker.DotNet.Models.NetworksCreateParameters()
                {
                    Driver   = "bridge",
                    Name     = Guid.NewGuid().ToString(),
                    Internal = true,
                    Labels   = DockerObjectBase.LabelsForCreation,
                };

                var createNetworkResponse = await docker.Networks.CreateNetworkAsync(createNetworkParams, cancellationToken);

                if (string.IsNullOrEmpty(createNetworkResponse.ID))
                {
                    throw new Exception("Network create failed with unknown error");
                }

                logger.LogTrace($"Network created with ID {createNetworkResponse.ID}");
                return(new DockerNetwork(createNetworkResponse.ID, logger, docker));
            }
            catch (Docker.DotNet.DockerApiException ex)
            {
                throw new Exception($"Network create failed with error: {ex.Message}", ex);
            }
        }
Esempio n. 2
0
        private static async Task cleanupNetworks(ILogger logger, Docker.DotNet.DockerClient docker)
        {
            var items = await docker.Networks.ListNetworksAsync(new Docker.DotNet.Models.NetworksListParameters()
            {
                Filters = DockerObjectBase.LabelsForFilter
            });

            foreach (var n in items)
            {
                await new DockerNetwork(n.ID, logger, docker).DisposeAsync();
            }
        }
Esempio n. 3
0
        private static async Task cleanupContainers(ILogger logger, Docker.DotNet.DockerClient docker)
        {
            var items = await docker.Containers.ListContainersAsync(new Docker.DotNet.Models.ContainersListParameters()
            {
                Filters = DockerObjectBase.LabelsForFilter
            });

            foreach (var c in items)
            {
                await new DockerContainer(c.ID, logger, docker).DisposeAsync();
            }
        }
Esempio n. 4
0
 public DockerContainer(string id, ILogger logger, Docker.DotNet.DockerClient docker)
     : base(id, logger, docker)
 {
 }
        public static async Task <DockerContainer> CreateNewContainer(ContainerConfig config, Docker.DotNet.DockerClient docker, ILogger logger, CancellationToken cancellationToken, Action <Docker.DotNet.Models.CreateContainerParameters>?configure = null)
        {
            try
            {
                var createContainerParams = new Docker.DotNet.Models.CreateContainerParameters()
                {
                    Image      = config.ImageName,
                    Labels     = DockerObjectBase.LabelsForCreation,
                    HostConfig = new Docker.DotNet.Models.HostConfig()
                    {
                        Mounts = new List <Docker.DotNet.Models.Mount>()
                        {
                        }
                    },
                    Env = config.EnvVariables.ToList()
                };

                if (config.CreateParams != null && config.CreateParams.Any())
                {
                    setImageParameters(createContainerParams, config.CreateParams, logger);
                }

                configure?.Invoke(createContainerParams);

                var createContainerResponse = await docker.Containers.CreateContainerAsync(createContainerParams, cancellationToken);

                if (string.IsNullOrEmpty(createContainerResponse.ID))
                {
                    throw new Exception("Container create failed with unknown error");
                }

                logger.LogTrace($"Container created with ID {createContainerResponse.ID}");

                return(new DockerContainer(createContainerResponse.ID, logger, docker));
            }
            catch (Docker.DotNet.DockerImageNotFoundException)
            {
                throw new Exception($"Image {config.ImageName} not found.");
            }
            catch (Docker.DotNet.DockerApiException ex)
            {
                throw new Exception($"Container create failed with error: {ex.Message}", ex);
            }
        }
Esempio n. 6
0
 protected abstract Task <string> runCore(Docker.DotNet.DockerClient docker, CancellationToken timeout, string solutionFolderToMount);
Esempio n. 7
0
 public DockerObjectBase(string id, ILogger logger, Docker.DotNet.DockerClient docker)
 {
     this.Id     = id;
     this.logger = logger;
     this.docker = docker;
 }
Esempio n. 8
0
        protected override async Task <string> runCore(Docker.DotNet.DockerClient docker, CancellationToken timeout, string solutionFolderToMount)
        {
            await using var container = await ContainerCreationHelper.CreateNewContainer(task.Container, docker, logger, timeout, cp => configureMount(cp, solutionFolderToMount));

            return(await container.RunContainerWaitForExit(timeout));
        }