create docker-network script
This commit is contained in:
92
docker-network.sh
Normal file
92
docker-network.sh
Normal file
@@ -0,0 +1,92 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
DOCKER_CONFIG="/etc/docker/daemon.json"
|
||||
JQ=$(command -v jq || true)
|
||||
|
||||
if [[ -z "$JQ" ]]; then
|
||||
echo "❌ jq is required but not installed."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Step 1: Check if default-address-pools exists and extract current second octet
|
||||
DEFAULT_OCTET=""
|
||||
if [[ -f "$DOCKER_CONFIG" ]] && grep -q '"default-address-pools"' "$DOCKER_CONFIG"; then
|
||||
BASE=$(jq -r '.["default-address-pools"][0].base' "$DOCKER_CONFIG")
|
||||
if [[ "$BASE" =~ ^10\.([0-9]+)\. ]]; then
|
||||
DEFAULT_OCTET="${BASH_REMATCH[1]}"
|
||||
echo "Found existing default-address-pools base: $BASE"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Step 2: Ask for second octet (suggest default if available)
|
||||
USE_EXISTING_CONFIG=false
|
||||
|
||||
if [[ -n "$DEFAULT_OCTET" ]]; then
|
||||
read -rp "Use existing second octet ($DEFAULT_OCTET)? [Y/n]: " confirm
|
||||
confirm=${confirm:-Y}
|
||||
if [[ "$confirm" =~ ^[Nn]$ ]]; then
|
||||
read -rp "Enter new second octet (e.g. 102): " OCTET
|
||||
else
|
||||
OCTET="$DEFAULT_OCTET"
|
||||
USE_EXISTING_CONFIG=true
|
||||
fi
|
||||
else
|
||||
read -rp "Enter second octet for Docker address pool (e.g. 102): " OCTET
|
||||
fi
|
||||
|
||||
# Validate input
|
||||
if ! [[ "$OCTET" =~ ^[0-9]+$ ]] || ((OCTET < 1 || OCTET > 254)); then
|
||||
echo "❌ Invalid octet: $OCTET"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Step 3: Write daemon.json (overwrite or create) only if needed
|
||||
if [[ "$USE_EXISTING_CONFIG" == false ]]; then
|
||||
echo "Writing Docker daemon config with base: 10.${OCTET}.0.0/16"
|
||||
sudo mkdir -p /etc/docker
|
||||
cat <<EOF | sudo tee "$DOCKER_CONFIG" > /dev/null
|
||||
{
|
||||
"default-address-pools": [
|
||||
{
|
||||
"base": "10.${OCTET}.0.0/16",
|
||||
"size": 24
|
||||
}
|
||||
]
|
||||
}
|
||||
EOF
|
||||
|
||||
echo "Restarting Docker..."
|
||||
sudo systemctl restart docker
|
||||
else
|
||||
echo "🟡 Skipping daemon config update and Docker restart (using existing settings)"
|
||||
fi
|
||||
|
||||
# Step 4: Create standard networks
|
||||
declare -A networks
|
||||
networks[internet]="10.${OCTET}.100.0/24"
|
||||
networks[pangolin_transport]="10.${OCTET}.200.0/24"
|
||||
|
||||
for name in "${!networks[@]}"; do
|
||||
subnet="${networks[$name]}"
|
||||
if docker network inspect "$name" >/dev/null 2>&1; then
|
||||
echo "✅ Network '$name' already exists."
|
||||
else
|
||||
echo "Creating network '$name' with subnet $subnet"
|
||||
|
||||
if [[ "$name" == "internet" ]]; then
|
||||
docker network create \
|
||||
--driver=bridge \
|
||||
--subnet="$subnet" \
|
||||
"$name"
|
||||
else
|
||||
docker network create \
|
||||
--driver=bridge \
|
||||
--subnet="$subnet" \
|
||||
--internal \
|
||||
"$name"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
echo "✅ Done. Docker daemon configured and standard networks created."
|
Reference in New Issue
Block a user