Skip to content

Instantly share code, notes, and snippets.

@skwid138
Created April 25, 2025 19:34
Show Gist options
  • Save skwid138/3b04471369950b021ddfc7f0b4c16bbf to your computer and use it in GitHub Desktop.
Save skwid138/3b04471369950b021ddfc7f0b4c16bbf to your computer and use it in GitHub Desktop.
macOS Fully Remove Docker
#!/bin/bash
# remove_docker_macos.sh
# Script to completely remove Docker and Docker Desktop from macOS
# Run with sudo permissions: sudo ./remove_docker_macos.sh
# Text formatting
BOLD='\033[1m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color
# Check if script is run with sudo
if [ "$EUID" -ne 0 ]; then
echo -e "${RED}${BOLD}Error: This script must be run with sudo privileges.${NC}"
echo "Please run: sudo $0"
exit 1
fi
# Function to print status messages
print_status() {
echo -e "${GREEN}${BOLD}==>${NC} $1"
}
# Function to print warnings
print_warning() {
echo -e "${YELLOW}${BOLD}WARNING:${NC} $1"
}
# Function to prompt for confirmation
confirm() {
read -p "$1 (y/n): " response
case "$response" in
[yY][eE][sS]|[yY])
return 0
;;
*)
return 1
;;
esac
}
# Main removal process
print_status "Starting Docker and Docker Desktop removal process..."
# Ensure Docker isn't running
print_status "Stopping Docker services..."
osascript -e 'quit app "Docker"' 2>/dev/null || true
pkill -f Docker || true
# Uninstall Docker Desktop application
print_status "Removing Docker Desktop application..."
if [ -d "/Applications/Docker.app" ]; then
rm -rf "/Applications/Docker.app"
print_status "Docker Desktop application removed."
else
print_warning "Docker Desktop application not found in /Applications."
fi
# Remove Docker configuration and data files
print_status "Removing Docker configuration and data files..."
DOCKER_DIRS=(
"$HOME/Library/Group Containers/group.com.docker"
"$HOME/Library/Containers/com.docker.docker"
"$HOME/.docker"
"$HOME/Library/Application Support/Docker Desktop"
"$HOME/Library/HTTPStorages/com.docker.docker"
"$HOME/Library/Logs/Docker Desktop"
"$HOME/Library/Saved Application State/com.docker.docker.savedState"
)
DOCKER_FILES=(
"$HOME/Library/Preferences/com.docker.docker.plist"
"$HOME/Library/Preferences/com.electron.docker-frontend.plist"
)
for dir in "${DOCKER_DIRS[@]}"; do
if [ -d "$dir" ]; then
rm -rf "$dir"
print_status "Removed directory: $dir"
fi
done
for file in "${DOCKER_FILES[@]}"; do
if [ -f "$file" ]; then
rm -f "$file"
print_status "Removed file: $file"
fi
done
# Remove Docker from Launch Daemons and PrivilegedHelperTools
print_status "Removing Docker system files..."
SYSTEM_FILES=(
"/Library/PrivilegedHelperTools/com.docker.vmnetd"
"/Library/LaunchDaemons/com.docker.vmnetd.plist"
)
for file in "${SYSTEM_FILES[@]}"; do
if [ -f "$file" ]; then
rm -f "$file"
print_status "Removed system file: $file"
fi
done
# Check for and remove Docker CLI tools installed via Homebrew
if command -v brew &>/dev/null; then
print_status "Checking for Docker components installed via Homebrew..."
BREW_PACKAGES=("docker" "docker-compose" "docker-machine")
for package in "${BREW_PACKAGES[@]}"; do
if brew list "$package" &>/dev/null; then
if confirm "Docker package '$package' found. Remove it?"; then
brew uninstall "$package"
print_status "Removed Homebrew package: $package"
else
print_warning "Skipped removal of Homebrew package: $package"
fi
fi
done
else
print_warning "Homebrew not installed, skipping Docker CLI tools check."
fi
# Verify removal
print_status "Verifying Docker removal..."
docker_cmd=$(command -v docker)
if [ "$docker_cmd" ]; then
print_warning "Docker command still found at: $docker_cmd"
print_warning "You may need to remove it manually or restart your terminal."
else
print_status "Docker command not found. Removal successful."
fi
docker_compose_cmd=$(command -v docker-compose)
if [ "$docker_compose_cmd" ]; then
print_warning "Docker Compose command still found at: $docker_compose_cmd"
print_warning "You may need to remove it manually or restart your terminal."
else
print_status "Docker Compose command not found. Removal successful."
fi
# Offer to reboot
echo
print_status "Docker removal process completed."
if confirm "Would you like to reboot your Mac now to complete the process?"; then
print_status "Rebooting system in 5 seconds..."
sleep 5
shutdown -r now
else
print_status "Please reboot your system manually when convenient."
fi
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment