From e1370f96b1212ab40bc9fc95a81eb2f9bd73f3f0 Mon Sep 17 00:00:00 2001 From: Tianyong Qiu Date: Fri, 28 Feb 2025 17:03:17 +0800 Subject: [PATCH] Update for docker installation --- devbox/devbox.local/cli/devbox | 114 +++++++++++++++++++-------------- 1 file changed, 65 insertions(+), 49 deletions(-) diff --git a/devbox/devbox.local/cli/devbox b/devbox/devbox.local/cli/devbox index 233c8fd..594a9cb 100644 --- a/devbox/devbox.local/cli/devbox +++ b/devbox/devbox.local/cli/devbox @@ -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 + # Check if Docker is already installed + if command -v docker &>/dev/null; then + echo "==> Docker is already installed." + return 0 fi - echo "[INFO] Docker CLI is installed. Checking daemon..." + # 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 - # Check if Docker daemon is running - if docker info >/dev/null 2>&1; then - echo "[OK] Docker daemon is running." + if [ -f get-docker.sh ]; then + sudo sh get-docker.sh + rm -f get-docker.sh return 0 + fi 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)." - 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 + # 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 - # 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..." - sudo systemctl start docker - sleep 2 - if systemctl is-active --quiet docker; then - echo "[OK] Docker service started successfully via systemctl." - 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 + if command -v yum &>/dev/null; then + sudo yum install -y docker + sudo systemctl start docker + sudo systemctl enable docker + return 0 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 }