#!/bin/bash installDockerNetwork() { if [[ "$DOCKER_NETWORK_SETUP_NEEDED" != "true" ]]; then isNotice "Docker network $CFG_NETWORK_NAME already exists or setup not needed" return 0 fi isHeader "Create a Docker Network" # Re-check existence right before creating, and converge instead of erroring # if it's already there. The requirement check that set # DOCKER_NETWORK_SETUP_NEEDED can run before the rootless daemon socket is # reachable (a failed inspect is indistinguishable from "network absent"), and # a previous install leaves the network behind — both make us think it's new # when it isn't. If it exists, leave it in place and adopt its real subnet so # CFG stays in step with docker (and we don't randomize to a subnet we can't apply). if dockerCommandRun "docker network inspect $CFG_NETWORK_NAME > /dev/null 2>&1"; then local current_subnet; current_subnet=$(dockerCommandRun "docker network inspect $CFG_NETWORK_NAME --format '{{range .IPAM.Config}}{{.Subnet}}{{end}}' 2>/dev/null") isNotice "Docker network $CFG_NETWORK_NAME already exists, leaving it in place" if [[ -n "$current_subnet" && "$current_subnet" != "$CFG_NETWORK_SUBNET" ]]; then adoptDockerSubnet "$current_subnet" fi return 0 fi isNotice "Network $CFG_NETWORK_NAME not found, creating now" # Check if we need to generate a new subnet updateDockerNetworkSubnet # Create the Docker network command local network_create="docker network create \ --driver=bridge \ --subnet=$CFG_NETWORK_SUBNET \ --ip-range=${CFG_NETWORK_SUBNET%.*}.0/24 \ --gateway=${CFG_NETWORK_SUBNET%.*}.1 \ --opt com.docker.network.bridge.name=$CFG_NETWORK_NAME \ $CFG_NETWORK_NAME" # Run the network creation command local result; result=$(dockerCommandRun "$network_create") if [[ $? -eq 0 ]]; then checkSuccess "Docker network $CFG_NETWORK_NAME created successfully" else isError "Failed to create Docker network $CFG_NETWORK_NAME" isError " $result" fi }