#!/bin/bash # Print error message and exit with code 1 # Usage: die "error message" die() { echo -e "\033[91mError: $1\033[0m" exit 1 } # Load environment variables from .env file # Usage: load_env [path_to_env_file] # If no path is provided, looks for .env in the same directory as the script load_env() { local script_dir="$(dirname "${BASH_SOURCE[0]}")" local env_file if [ -z "$1" ]; then echo "Usage: $0 [path_to_env_file]" return 1 else # If path is relative, make it absolute using script directory as base if [[ "$1" != /* ]]; then env_file="$script_dir/$1" else env_file="$1" fi fi if [ -f "$env_file" ]; then set -a source "$env_file" set +a else echo "Warning: .env file not found at $env_file" return 1 fi } grey_start() { echo -e -n "\033[90m" } grey_end() { echo -e -n "\033[0m" } # Test if Docker is installed and working on the local machine # Returns 0 if Docker is working, 1 if there are any issues test_docker() { echo "Testing Docker on local machine..." # Test Docker installation if ! command -v docker >/dev/null 2>&1; then die "Docker is not installed on this machine" fi # Test Docker daemon is running if ! docker info >/dev/null 2>&1; then die "Docker daemon is not running" fi # Test Docker can run containers if ! docker run --rm hello-world >/dev/null 2>&1; then die "Docker cannot run containers" fi echo "Docker is working correctly on local machine" return 0 } start_container() { # Check if container exists and is stopped echo "Checking container status..." if docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then if docker ps --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then die "Container ${CONTAINER_NAME} is already running" else echo "Starting existing container ${CONTAINER_NAME}..." grey_start if ! docker start "${CONTAINER_NAME}"; then die "Failed to start container ${CONTAINER_NAME}" fi grey_end fi else echo "Creating and starting new container ${CONTAINER_NAME}..." grey_start docker run -d \ --restart unless-stopped \ --name ${CONTAINER_NAME} \ -p ${HOST_PORT}:${CONTAINER_PORT} \ -v ${DATA_FOLDER}:/skdata \ ${IMAGE_REGISTRY}/${IMAGE_REPO}:${IMAGE_TAG} grey_end fi # check if the container is running if ! docker ps --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then die "Container ${CONTAINER_NAME} is not running" fi # print the container id ID=$(docker ps --format '{{.ID}}' --filter "name=^${CONTAINER_NAME}$") echo "Container ${CONTAINER_NAME} is running with ID ${ID}" return 0 } stop_container() { # Check if container is running echo "Checking if container is running..." if docker ps --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then echo "Stopping container ${CONTAINER_NAME}..." grey_start if ! docker stop "${CONTAINER_NAME}"; then die "Failed to stop container ${CONTAINER_NAME}" fi grey_end echo "Container ${CONTAINER_NAME} stopped successfully" return 0 else echo "Container ${CONTAINER_NAME} is not running" return 1 fi }