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))); }
/// <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); }
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)); }
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(); }