Files
env/uninstall-docker.sh
2026-03-19 14:32:48 +08:00

115 lines
3.2 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
set -euo pipefail
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
BOLD='\033[1m'
NC='\033[0m'
OS_TYPE=""
REMOVE_DOCKER_DATA="${REMOVE_DOCKER_DATA:-0}"
info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
success() {
echo -e "${BLUE}[DONE]${NC} $1"
}
error() {
echo -e "${RED}[ERROR]${NC} $1"
exit 1
}
section() {
echo
echo -e "${BOLD}${BLUE}== $1 ==${NC}"
}
detect_system() {
case "${OSTYPE:-}" in
linux-gnu*) OS_TYPE="linux" ;;
darwin*) OS_TYPE="macos" ;;
*) error "不支持的操作系统: ${OSTYPE:-unknown},仅支持 Linux 和 macOS。" ;;
esac
info "检测到系统: $OS_TYPE"
}
run_privileged() {
if [[ "$(id -u)" -eq 0 ]]; then
"$@"
elif command -v sudo >/dev/null 2>&1; then
sudo "$@"
else
error "该步骤需要 root 权限,请安装 sudo 或以 root 身份运行。"
fi
}
uninstall_linux() {
section "卸载 Docker"
info "移除 Docker 相关软件包..."
if command -v apt-get >/dev/null 2>&1; then
run_privileged apt-get remove -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras docker-compose || true
run_privileged rm -f /etc/apt/sources.list.d/docker.list
run_privileged rm -f /etc/apt/keyrings/docker.asc
elif command -v dnf >/dev/null 2>&1; then
run_privileged dnf remove -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras docker-compose || true
run_privileged rm -f /etc/yum.repos.d/docker-ce.repo
elif command -v yum >/dev/null 2>&1; then
run_privileged yum remove -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras docker-compose || true
run_privileged rm -f /etc/yum.repos.d/docker-ce.repo
else
warn "当前 Linux 包管理器不受支持,请手动卸载 Docker。"
fi
if [[ "$REMOVE_DOCKER_DATA" == "1" ]]; then
warn "删除 Docker 数据目录..."
run_privileged rm -rf /var/lib/docker /var/lib/containerd
else
warn "默认保留 Docker 数据。如需删除 /var/lib/docker 和 /var/lib/containerd请设置 REMOVE_DOCKER_DATA=1。"
fi
}
uninstall_macos() {
section "卸载 Docker"
if command -v brew >/dev/null 2>&1 && brew list --cask docker >/dev/null 2>&1; then
info "移除 Docker Desktop..."
brew uninstall --cask docker || true
else
warn "未检测到 Docker Desktop cask。"
fi
if [[ "$REMOVE_DOCKER_DATA" == "1" ]]; then
warn "删除 Docker Desktop 数据..."
rm -rf "$HOME/Library/Containers/com.docker.docker"
rm -rf "$HOME/Library/Application Support/Docker Desktop"
rm -rf "$HOME/.docker"
else
warn "默认保留 Docker Desktop 数据。如需删除用户数据,请设置 REMOVE_DOCKER_DATA=1。"
fi
}
main() {
section "Docker 卸载脚本"
detect_system
if [[ "$OS_TYPE" == "linux" ]]; then
uninstall_linux
else
uninstall_macos
fi
success "Docker 卸载流程结束。"
}
main "$@"