Created
April 25, 2025 19:34
-
-
Save skwid138/3b04471369950b021ddfc7f0b4c16bbf to your computer and use it in GitHub Desktop.
macOS Fully Remove Docker
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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