#!/bin/bash clear # Optional: prune Docker docker volume prune -af 2>&1 > /dev/null docker image prune -af 2>&1 > /dev/null docker builder prune -af 2>&1 > /dev/null IFS=$'\n' echo "Searching for large directories.." overlay=($(du -sh /var/lib/docker/overlay2/* | sort -hr | head -n 10)) clear echo "Containers that use a lot of space:" for layer in "${overlay[@]}"; do size=$(echo $layer | awk '{print $1}') layer_id=$(echo $layer | awk '{print $2}' | sed 's|/var/lib/docker/overlay2/||g') # Check MergeDir container_name=$( docker inspect $(docker ps -qa) | jq -r 'map([.Name, .GraphDriver.Data.MergedDir]) | .[] | "\(.[0])\t\(.[1])"' \ | grep -w $layer_id | awk '{print $1}' | sed 's|/||g') # Check UpperDir if [[ -z $container_name ]]; then container_name=$( docker inspect $(docker ps -qa) | jq -r 'map([.Name, .GraphDriver.Data.UpperDir]) | .[] | "\(.[0])\t\(.[1])"' \ | grep -w $layer_id | awk '{print $1}' | sed 's|/||g') fi # Check LowerDir if [[ -z $container_name ]]; then container_name=$( docker inspect $(docker ps -qa) | jq -r 'map([.Name, .GraphDriver.Data.LowerDir]) | .[] | "\(.[0])\t\(.[1])"' \ | grep -w $layer_id | awk '{print $1}' | sed 's|/||g') fi # Check WorkDir if [[ -z $container_name ]]; then container_name=$( docker inspect $(docker ps -qa) | jq -r 'map([.Name, .GraphDriver.Data.WorkDir]) | .[] | "\(.[0])\t\(.[1])"' \ | grep -w $layer_id | awk '{print $1}' | sed 's|/||g') fi if [[ -n $container_name ]]; then echo "$size $container_name" fi done