Your Name 093dee3fd3 .
2025-04-21 09:58:37 +12:00

128 lines
3.5 KiB
Bash
Executable File

#!/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
}