public async Task <bool> DeleteImageAsync(string id, bool force = false)
        {
            using var connection = await _dockerClient.ConnectAsync();

            var images = connection.Images;

            try
            {
                var parameters = new ImageDeleteParameters
                {
                    Force         = force,
                    PruneChildren = true
                };
                await images.DeleteImageAsync(id, parameters);

                _logger.LogInformation("Successfully deleted image with id '{Id}'.", id);

                return(true);
            }
            catch (Exception ex)
            {
                _logger.LogWarning(ex, "Could not delete image with id '{Id}'.", id);
                return(false);
            }
        }
 public async Task DeleteImages(List <string> imageIds)
 {
     foreach (string imageId in imageIds)
     {
         ImageDeleteParameters deleteParameters = new ImageDeleteParameters();
         await client.Images.DeleteImageAsync(imageId, deleteParameters);
     }
     await Refresh();
 }
        private static async Task PerformCleanup(IDockerClient dockerClient)
        {
            var imageDeleteParameters = new ImageDeleteParameters
            {
                Force = true,
                // this is actually a badly named variable, it means `noprune` instead of `pleaseprune`
                // this is fixed in https://github.com/microsoft/Docker.DotNet/pull/316 but there hasn't
                // been a release for a very long time (issue still exists in 3.125.2).
                PruneChildren = false
            };

            await Task.WhenAll(
                ImagesToDelete.Select(i => dockerClient.Images.DeleteImageAsync(i, imageDeleteParameters)));
        }
Example #4
0
        /// <summary>
        /// Removes container and deletes image
        /// </summary>
        /// <param name="client">Docker client</param>
        /// <param name="name">Container name</param>
        /// <param name="image">Image name</param>
        /// <returns>Task</returns>
        public static async Task CleanupContainerAsync(this IDockerClient client, string name, string image)
        {
            var removeParams = new ContainerRemoveParameters
            {
                Force = true
            };

            await Safe(() => client.Containers.RemoveContainerAsync(name, removeParams));

            var imageParams = new ImageDeleteParameters
            {
                Force         = true,
                PruneChildren = true
            };

            await Safe(() => client.Images.DeleteImageAsync(image, imageParams));
        }
        public static async Task Reap(this IImage image)
        {
            var dockerClient = ((AbstractImage)image).DockerClient;
            var imageName    = image.ImageName;

            var images = await dockerClient.Images.ListImagesAsync(new ImagesListParameters());

            var existingImage = images.FirstOrDefault(i => i.RepoTags != null && i.RepoTags.Contains(imageName));

            if (existingImage != null)
            {
                var parameters = new ImageDeleteParameters {
                    Force = true
                };

                await dockerClient.Images.DeleteImageAsync(imageName, parameters);
            }
        }
        public async Task CleanupProcess(ILogger logger)
        {
            var container = await this.container();

            logger.LogInformation($"Stopping container:{this.SafeName}");
            await this.stopContainer(container.ID);

            var rmPara = new ContainerRemoveParameters();

            rmPara.Force = true;
            logger.LogInformation($"Removing container:{this.SafeName}");
            await this.client.Containers.RemoveContainerAsync(container.ID, rmPara, this.cancelTokenSource.Token);

            var delPara = new ImageDeleteParameters();

            delPara.Force = true;
            logger.LogInformation($"Removing image:{container.Image}");
            await this.client.Images.DeleteImageAsync(container.Image, delPara, this.cancelTokenSource.Token);
        }
Example #7
0
        public async Task DeleteDanglingImages()
        {
            using (var client = GetClient())
            {
                var p = new ImagesListParameters();
                p.Filters = new Dictionary <string, IDictionary <string, bool> >();
                p.Filters.Add("dangling", new Dictionary <string, bool>()
                {
                    { "true", true }
                });
                var images = await client.Images.ListImagesAsync(p);

                foreach (var image in images)
                {
                    var p2 = new ImageDeleteParameters();
                    p2.Force = false;
                    await client.Images.DeleteImageAsync(image.ID, p2);
                }
            }
        }
        public async Task <IList <IDictionary <string, string> > > DeleteImageAsync(string name, ImageDeleteParameters parameters)
        {
            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentNullException("name");
            }

            if (parameters == null)
            {
                throw new ArgumentNullException("parameters");
            }

            string            path            = string.Format(CultureInfo.InvariantCulture, "images/{0}", name);
            IQueryString      queryParameters = new QueryString <ImageDeleteParameters>(parameters);
            DockerApiResponse response        = await this.Client.MakeRequestAsync(new[] { NoSuchImageHandler }, HttpMethod.Delete, path, queryParameters).ConfigureAwait(false);

            return(this.Client.JsonSerializer.DeserializeObject <Dictionary <string, string>[]>(response.Body));
        }
Example #9
0
        public async Task <IList <IDictionary <string, string> > > DeleteImageAsync(string name, ImageDeleteParameters parameters)
        {
            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentNullException(nameof(name));
            }

            if (parameters == null)
            {
                throw new ArgumentNullException(nameof(parameters));
            }

            IQueryString queryParameters = new QueryString <ImageDeleteParameters>(parameters);
            var          response        = await this._client.MakeRequestAsync(new[] { NoSuchImageHandler }, HttpMethod.Delete, $"images/{name}", queryParameters).ConfigureAwait(false);

            return(this._client.JsonSerializer.DeserializeObject <Dictionary <string, string>[]>(response.Body));
        }
 public static void DeleteImage(this IImageOperations operations, string name, ImageDeleteParameters parameters)
 {
     operations.DeleteImageAsync(name, parameters).Wait();
 }