public async Task<Either<ContainerErrors, RunningContainer>> StartContainerAsync(string containerId) { using (var client = _clientFactory.Create()) { // Strange interface for the filtering, see https://github.com/dotnet/Docker.DotNet/issues/303 var dict = new Dictionary<string, IDictionary<string, bool>> { { "id", new Dictionary<string, bool> { { containerId, true } } } }; var containers = await client.Containers.ListContainersAsync(new ContainersListParameters { Filters = dict }); var container = containers.SingleOrDefault(); if (container?.State.ToLower() == "running") { return new RunningContainer(container.ID); } var containerStarted = await client.Containers.StartContainerAsync(containerId, null); if (!containerStarted) { return new ContainerErrors("Could not start Container."); } return new RunningContainer(containerId); } }
public async Task RemoveContainerAsync(string containerId) { using var client = _clientFactory.Create(); await client.Containers.KillContainerAsync(containerId, new ContainerKillParameters()); await client.Containers.RemoveContainerAsync(containerId, new ContainerRemoveParameters { Force = true }); }
public async Task <Maybe <ContainerListResponse> > FindByNameAsync(string containerName) { using (var client = _clientFactory.Create()) { var containers = await client.Containers.ListContainersAsync(new ContainersListParameters { All = true }); var existingContainer = containers.SingleOrDefault(f => f.Names.Contains("/" + containerName)); return(Maybe.CreateFromNullable(existingContainer)); } }
private async Task <string> SetupContainerAsync() { using var client = _clientFactory.Create(); await CreateImageAsync(client); await RemoveContainerIfExistingAsync(client); var containerId = await CreateContainerAsync(client); await client.Containers.StartContainerAsync(containerId, null); return(containerId); }
public async Task <Maybe <string> > TryFindingIdByNameAsync(string namepart) { using var client = _clientFactory.Create(); var containers = await client.Containers.ListContainersAsync(new ContainersListParameters { All = true }); var existingContainer = containers.SingleOrDefault(f => f.Names.Contains("/" + namepart)); return(existingContainer == null ? Maybe.CreateNone <string>() : existingContainer.ID); }
private async Task <Either <ContainerErrors, CreatedContainer> > CreateImageAndContainerAsync(IContainerConfiguration containerConfig) { using var client = _clientFactory.Create(); await CreateImageAsync(client, containerConfig); var createContainerResponse = await CreateContainerAsync(client, containerConfig); if (createContainerResponse.Warnings.Any()) { return(new ContainerErrors(createContainerResponse.Warnings.ToArray())); } return(new CreatedContainer(createContainerResponse.ID)); }
public async Task RemoveContainerAsync(string containerId) { if (string.IsNullOrEmpty(containerId)) { return; } using (var client = _clientFactory.Create()) { await client.Containers.KillContainerAsync(containerId, new ContainerKillParameters()); await client.Containers.RemoveContainerAsync(containerId, new ContainerRemoveParameters { Force = true }); } }