Update for docker installation

This commit is contained in:
Tianyong Qiu 2025-02-28 17:03:17 +08:00
parent eef48ea6e2
commit e1370f96b1

View File

@ -323,66 +323,82 @@ inspect_args() {
install_docker() { install_docker() {
echo "[INFO] Checking Docker installation..." echo "==> Installing Docker..."
# Check if Docker CLI is installed # Check if Docker is already installed
if ! command -v docker >/dev/null 2>&1; then if command -v docker &>/dev/null; then
echo "[ERROR] Docker CLI is not installed." echo "==> Docker is already installed."
return 1
fi
echo "[INFO] Docker CLI is installed. Checking daemon..."
# Check if Docker daemon is running
if docker info >/dev/null 2>&1; then
echo "[OK] Docker daemon is running."
return 0 return 0
fi fi
# Check if running on WSL # Install Docker using the official script
if grep -qi microsoft /proc/version; then if command -v curl &>/dev/null || command -v wget &>/dev/null; then
echo "[INFO] Detected WSL environment. Skipping service startup." if command -v curl &>/dev/null; then
if [ -S /var/run/docker.sock ]; then curl -fsSL https://get.docker.com -o get-docker.sh
echo "[OK] Docker socket found (/var/run/docker.sock)." elif command -v wget &>/dev/null; then
wget -qO get-docker.sh https://get.docker.com
fi
if [ -f get-docker.sh ]; then
sudo sh get-docker.sh
rm -f get-docker.sh
return 0 return 0
else
echo "[ERROR] Docker socket /var/run/docker.sock not found."
echo "[SOLUTION] Please start Docker Desktop on Windows and enable WSL integration, then mount /var/run/docker.sock into the container."
return 1
fi fi
fi fi
# Check if running on macOS # Install Docker using package manager
if [[ "$OSTYPE" == "linux-gnu"* ]]; then if command -v apt-get &>/dev/null; then
echo "[INFO] Running on Linux. Attempting to start Docker service..." sudo apt-get update
if command -v systemctl >/dev/null 2>&1; then sudo apt-get install -y docker.io
echo "[INFO] Starting Docker with systemctl..." return 0
fi
if command -v yum &>/dev/null; then
sudo yum install -y docker
sudo systemctl start docker sudo systemctl start docker
sleep 2 sudo systemctl enable docker
if systemctl is-active --quiet docker; then
echo "[OK] Docker service started successfully via systemctl."
return 0 return 0
else
echo "[ERROR] Failed to start Docker using systemctl."
return 1
fi
elif command -v service >/dev/null 2>&1; then
echo "[INFO] systemctl not found, trying to start Docker using service..."
sudo service docker start
sleep 2
if docker info >/dev/null 2>&1; then
echo "[OK] Docker service started successfully via service command."
return 0
else
echo "[ERROR] Failed to start Docker using service command."
return 1
fi
else
echo "[ERROR] Neither systemctl nor service command found. Please start Docker manually."
return 1
fi
fi fi
if command -v dnf &>/dev/null; then
sudo dnf install -y docker
sudo systemctl start docker
sudo systemctl enable docker
return 0
fi
if command -v zypper &>/dev/null; then
sudo zypper install -y docker
sudo systemctl start docker
sudo systemctl enable docker
return 0
fi
if command -v apk &>/dev/null; then
sudo apk add docker
sudo rc-update add docker boot
sudo service docker start
return 0
fi
if command -v pacman &>/dev/null; then
sudo pacman -S --noconfirm docker
sudo systemctl start docker
sudo systemctl enable docker
return 0
fi
if command -v brew &>/dev/null; then
brew install docker
return 0
fi
if command -v snap &>/dev/null; then
sudo snap install docker
return 0
fi
echo "ERROR: Unable to install Docker automatically. Please install Docker manually."
return 1 return 1
} }