#!/usr/bin/env ruby require "json" architecture_to_keep = "amd64" images_to_delete = `docker image ls --format json` .lines .map { |line| data = JSON.parse(line) [data["Repository"], data["Tag"]].join(":") } .sort .flat_map { |image| data = JSON.parse(`docker image inspect "#{image}"`) data.map { |version| architecture = [version["Architecture"], version["Variant"]].compact.join("/") {image: image, architecture: architecture} } } .select { |image| image[:architecture] != architecture_to_keep } if images_to_delete.empty? puts "No images with the wrong architecture found." exit end puts "The following images will be removed" images_to_delete.each { |image| puts " #{image[:image]} - #{image[:architecture]}" } puts print "Press Y to continue: " gets.chomp.then { |result| unless result == "Y" puts "Aborting due to user input" exit 1 end } images_to_delete.each do |image| print "Removing #{image[:image]}..." `docker image rm "#{image[:image]}"` puts " done!" end