#!/bin/bash # filepath: /code/scripts/docker-management/docker-project-manager.sh # Initialize variables projects=() action="" pull_images=false # Parse command line arguments while [[ $# -gt 0 ]]; do case $1 in --up|--down|--restart|--logs) if [ -n "$action" ]; then echo "Error: Cannot specify multiple actions (--up, --down, --restart, --logs)" exit 1 fi action="${1#--}" # Remove leading -- shift ;; --pull) pull_images=true shift ;; --*) echo "Error: Unknown flag '$1'" exit 1 ;; *) # Treat anything else as a project name projects+=("$1") shift ;; esac done # Validate inputs if [ -z "$action" ]; then echo "Error: Must specify either --up, --down, --restart, or --logs" exit 1 fi if [ ${#projects[@]} -eq 0 ]; then echo "Error: Must specify at least one project name" exit 1 fi # Execute the Docker actions for each project name docker_dir="/docker/" for project_name in "${projects[@]}"; do project_path="${docker_dir}${project_name}" if [ ! -d "$project_path" ]; then echo "Error: Project directory '$project_path' not found" continue fi # Check for docker-compose.yml or .yaml if [ ! -f "${project_path}/docker-compose.yml" ] && [ ! -f "${project_path}/docker-compose.yaml" ]; then echo "Error: No docker-compose.yml or docker-compose.yaml found in '$project_path'" continue fi cd "$project_path" || continue case "$action" in down|restart) docker compose down --remove-orphans ;; esac if [ "$pull_images" = true ]; then docker compose pull fi case "$action" in up|restart) docker compose up -d ;; esac if [ "$action" = "logs" ]; then docker compose logs --follow fi done