#!/bin/bash set -euo pipefail # ------------------------------- # Prompt user for subnet base # ------------------------------- read -rp "Enter the second octet for your Docker network (e.g., 100 for 10.100.0.0/16): " octet # Validate that it's a number between 1 and 254 if ! [[ "$octet" =~ ^[0-9]{1,3}$ ]] || ((octet < 1 || octet > 254)); then echo "Invalid input. Must be a number between 1 and 254." exit 1 fi # ------------------------------- # Define values # ------------------------------- DOCKER_DAEMON_FILE="/etc/docker/daemon.json" ADDRESS_POOL_BASE="10.${octet}.0.0/16" ADDRESS_POOL_SIZE=24 # NETWORK_NAME="bridge_default" NETWORK_SUBNET="10.${octet}.1.0/24" # ------------------------------- # Replace daemon.json # ------------------------------- echo "Writing Docker daemon.json with base $ADDRESS_POOL_BASE..." sudo mkdir -p /etc/docker cat < /dev/null { "default-address-pools": [ { "base": "10.${octet}.0.0/16", "size": 24 } ] } EOF echo "Docker config updated at $DOCKER_DAEMON_FILE" # ------------------------------- # Delete and recreate network # ------------------------------- # if docker network inspect "$NETWORK_NAME" >/dev/null 2>&1; then # echo "Network '$NETWORK_NAME' exists. Deleting it..." # docker network rm "$NETWORK_NAME" # fi # echo "Creating network '$NETWORK_NAME' with subnet $NETWORK_SUBNET..." # docker network create \ # --driver=bridge \ # --subnet="$NETWORK_SUBNET" \ # "$NETWORK_NAME" # echo "✅ Done. You may need to restart Docker to apply default address pool changes:" echo " sudo systemctl restart docker"