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() {
echo "[INFO] Checking Docker installation..."
echo "==> Installing Docker..."
# Check if Docker CLI is installed
if ! command -v docker >/dev/null 2>&1; then
echo "[ERROR] Docker CLI is not 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."
# Check if Docker is already installed
if command -v docker &>/dev/null; then
echo "==> Docker is already installed."
return 0
fi
# Check if running on WSL
if grep -qi microsoft /proc/version; then
echo "[INFO] Detected WSL environment. Skipping service startup."
if [ -S /var/run/docker.sock ]; then
echo "[OK] Docker socket found (/var/run/docker.sock)."
# Install Docker using the official script
if command -v curl &>/dev/null || command -v wget &>/dev/null; then
if command -v curl &>/dev/null; then
curl -fsSL https://get.docker.com -o get-docker.sh
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
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
# Check if running on macOS
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
echo "[INFO] Running on Linux. Attempting to start Docker service..."
if command -v systemctl >/dev/null 2>&1; then
echo "[INFO] Starting Docker with systemctl..."
# Install Docker using package manager
if command -v apt-get &>/dev/null; then
sudo apt-get update
sudo apt-get install -y docker.io
return 0
fi
if command -v yum &>/dev/null; then
sudo yum install -y docker
sudo systemctl start docker
sleep 2
if systemctl is-active --quiet docker; then
echo "[OK] Docker service started successfully via systemctl."
sudo systemctl enable docker
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
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
}