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); } }
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(); } }
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(); } }
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); } }
protected abstract Task <string> runCore(Docker.DotNet.DockerClient docker, CancellationToken timeout, string solutionFolderToMount);
public DockerObjectBase(string id, ILogger logger, Docker.DotNet.DockerClient docker) { this.Id = id; this.logger = logger; this.docker = docker; }
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)); }