.local-bin/scripts/docker_check.sh
2026-02-09 13:55:37 -05:00

212 lines
6.8 KiB
Bash
Executable file

#!/usr/bin/env bash
# Detect platform
PLATFORM="$(uname)"
# Function to detect Docker runtime on macOS
detect_docker_runtime_macos() {
if command -v colima &>/dev/null; then
echo "colima"
elif [ -d "/Applications/Docker.app" ] || command -v docker &>/dev/null; then
echo "docker-desktop"
else
echo "none"
fi
}
detect_linux_package_manager() {
if command -v apt-get &>/dev/null; then
echo "apt"
elif command -v yum &>/dev/null; then
echo "yum"
elif command -v dnf &>/dev/null; then
echo "dnf"
elif command -v pacman &>/dev/null; then
echo "pacman"
else
echo "unknown"
fi
}
# Function to install Docker on Linux
install_docker_linux() {
local pkg_manager
pkg_manager=$(detect_linux_package_manager)
echo "Docker is not installed."
read -rp "Do you want to install Docker using $pkg_manager? (y/n): " choice
if [ "$choice" == "y" ]; then
case $pkg_manager in
"apt")
sudo apt-get update
sudo apt-get install -y docker.io docker-compose
sudo systemctl enable --now docker
sudo usermod -aG docker "$USER"
echo "Docker has been installed. Please log out and back in, then restart this script."
;;
"yum"|"dnf")
sudo "$pkg_manager" install -y docker docker-compose
sudo systemctl enable --now docker
sudo usermod -aG docker "$USER"
echo "Docker has been installed. Please log out and back in, then restart this script."
;;
"pacman")
sudo pacman -S docker docker-compose
sudo systemctl enable --now docker
sudo usermod -aG docker "$USER"
echo "Docker has been installed. Please log out and back in, then restart this script."
;;
*)
echo "Unsupported package manager. Please install Docker manually."
exit 1
;;
esac
exit 0
else
echo "Docker is required to run this script. Exiting."
exit 1
fi
}
# Function to start Docker if not running
start_docker() {
if [ "$PLATFORM" == "Darwin" ]; then
local runtime
runtime=$(detect_docker_runtime_macos)
if [ "$runtime" == "colima" ]; then
if ! colima status 2>/dev/null | grep -q "Running"; then
echo "Docker is not running. Starting Colima..."
colima start
sleep 3
fi
elif [ "$runtime" == "docker-desktop" ]; then
echo "Docker is not running. Starting Docker Desktop..."
open --background -a Docker
sleep 3
else
echo "No Docker runtime found (neither Colima nor Docker Desktop)."
install_docker
fi
elif [ "$PLATFORM" == "Linux" ]; then
echo "Docker is not running. Starting Docker..."
sudo systemctl start docker
sleep 3
else
echo "Unsupported platform: $PLATFORM"
exit 1
fi
}
# Check if Docker is installed
install_docker() {
if [ "$PLATFORM" == "Darwin" ]; then
echo "Docker is not installed."
echo "Options:"
echo " 1. Install Colima (lightweight, recommended)"
echo " 2. Install Docker Desktop (official)"
read -rp "Choose option (1/2): " choice
case "$choice" in
1)
if command -v brew &>/dev/null; then
brew install colima
echo "Colima installed. Starting..."
colima start
else
echo "Homebrew not found. Please install Homebrew first."
exit 1
fi
;;
2)
read -rp "Do you want to install Docker Desktop using Homebrew? (y/n): " confirm
if [ "$confirm" == "y" ]; then
brew install --cask docker
echo "Docker Desktop has been installed. Please restart this script."
else
echo "Docker is required to run this script. Exiting."
exit 1
fi
;;
*)
echo "Invalid choice. Exiting."
exit 1
;;
esac
exit 0
elif [ "$PLATFORM" == "Linux" ]; then
install_docker_linux
else
echo "Unsupported platform: $PLATFORM"
exit 1
fi
}
# Check if docker-compose is installed
install_docker_compose() {
if [ "$PLATFORM" == "Darwin" ]; then
echo "docker-compose is not installed."
read -rp "Do you want to install docker-compose using Homebrew? (y/n): " choice
if [ "$choice" == "y" ]; then
brew install docker-compose
echo "Docker Compose has been installed. Please restart this script."
exit 0
else
echo "Docker Compose is required to run this script. Exiting."
exit 1
fi
elif [ "$PLATFORM" == "Linux" ]; then
local pkg_manager
pkg_manager=$(detect_linux_package_manager)
echo "docker-compose is not installed."
read -rp "Do you want to install docker-compose using $pkg_manager? (y/n): " choice
if [ "$choice" == "y" ]; then
case $pkg_manager in
"apt")
sudo apt-get update
sudo apt-get install -y docker-compose
;;
"yum"|"dnf")
sudo "$pkg_manager" install -y docker-compose
;;
"pacman")
sudo pacman -S docker-compose
;;
*)
echo "Unsupported package manager. Please install docker-compose manually."
exit 1
;;
esac
echo "Docker Compose has been installed. Please restart this script."
exit 0
else
echo "Docker Compose is required to run this script. Exiting."
exit 1
fi
else
echo "Unsupported platform: $PLATFORM"
exit 1
fi
}
if ! command -v docker &>/dev/null; then
install_docker
fi
# Check if Docker is running
if [ "$(docker info >/dev/null 2>&1 && echo "running")" != "running" ]; then
start_docker
fi
# Check if docker-compose is called
if [ "$1" == "docker-compose" ]; then
# If docker-compose is called, check if Docker is running again
if [ "$(docker info >/dev/null 2>&1 && echo "running")" != "running" ]; then
if ! command -v docker-compose &>/dev/null; then
start_docker
fi
fi
fi
# Run the provided command
"$@"