Created
May 29, 2025 15:53
-
-
Save inchoate/43ee52d05c64bbc4a29e3137a984eabe to your computer and use it in GitHub Desktop.
Shell script to cycle (down, rebuild, up) specific services in a docker compose stack
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# cycle_stack.sh - Script to tear down and rebuild Docker Compose services | |
# Usage: ./cycle_stack.sh [service_name1] [service_name2] ... | |
set -e # Exit on error | |
# Check if Docker Compose is installed | |
if ! command -v docker compose &>/dev/null; then | |
echo "Error: docker compose is not installed or not in PATH" | |
exit 1 | |
fi | |
# Function to cycle the entire stack | |
cycle_all() { | |
echo "π Cycling entire Docker Compose stack..." | |
echo "β¬οΈ Bringing down all services..." | |
docker compose down | |
echo "β¬οΈ Rebuilding and starting all services..." | |
docker compose up -d --build | |
echo "β Stack cycling complete!" | |
} | |
# Function to cycle a specific service | |
cycle_service() { | |
local service=$1 | |
# Check if the service exists in the docker-compose.yml | |
if ! docker compose config --services | grep -q "^$service$"; then | |
echo "β Error: Service '$service' not found in docker-compose.yml" | |
echo "Available services:" | |
docker compose config --services | |
return 1 | |
fi | |
echo "π Cycling service: $service" | |
echo "β¬οΈ Stopping service..." | |
docker compose stop $service | |
echo "ποΈ Removing service container..." | |
docker compose rm -f $service | |
echo "ποΈ Rebuilding and starting service..." | |
docker compose up -d --build $service | |
echo "β Service '$service' cycling complete!" | |
} | |
# Function to cycle multiple services | |
cycle_services() { | |
local failed=0 | |
echo "π Cycling multiple services: $*" | |
# Stop all specified services first | |
echo "β¬οΈ Stopping services..." | |
docker compose stop "$@" | |
# Remove all specified services | |
echo "ποΈ Removing service containers..." | |
docker compose rm -f "$@" | |
# Rebuild and start all specified services | |
echo "ποΈ Rebuilding and starting services..." | |
docker compose up -d --build "$@" | |
# Verify each service exists and was started | |
for service in "$@"; do | |
if ! docker compose config --services | grep -q "^$service$"; then | |
echo "β Error: Service '$service' not found in docker-compose.yml" | |
failed=1 | |
fi | |
done | |
if [ $failed -eq 0 ]; then | |
echo "β All specified services cycling complete!" | |
else | |
echo "β οΈ Some services failed to cycle" | |
return 1 | |
fi | |
} | |
# Main script logic | |
if [ $# -eq 0 ]; then | |
# No arguments provided, cycle the entire stack | |
cycle_all | |
elif [ $# -eq 1 ]; then | |
# One argument provided, cycle the specified service | |
cycle_service "$1" | |
else | |
# Multiple arguments provided, cycle specified services | |
cycle_services "$@" | |
fi | |
# Show running containers | |
echo "π Current running containers:" | |
docker compose ps |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment