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);
            }
        }
Ejemplo n.º 2
0
        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 });
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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 });
            }
        }