Add docker-project-manager.sh which simplifies docker compose up/down usage for projects in /docker
80 lines
1.9 KiB
Bash
Executable File
80 lines
1.9 KiB
Bash
Executable File
#!/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)
|
|
if [ -n "$action" ]; then
|
|
echo "Error: Cannot specify multiple actions (--up, --down, --restart)"
|
|
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, or --restart"
|
|
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
|
|
done |