Files
iran-docker/iran-docker.sh
Mohammadhossein Fakhraei 7b76a3fd87 Fix docker proxy providers
2025-07-14 13:04:17 +03:30

219 lines
6.6 KiB
Bash

#!/bin/bash
# Iran Docker Management Script
# Author: https://github.com/Linuxmaster14
RED='\033[1;31m'
GREEN='\033[1;32m'
CYAN='\033[1;36m'
NC='\033[0m'
# Check if script is running with root privileges
if [ "$EUID" -ne 0 ]; then
echo -e "${RED}Error:${NC} Please run this script as root (use sudo)"
exit 1
fi
# Main menu options
main_menu_items=("Set DNS" "Install Docker" "Update Docker" "Set Docker Proxy" "Exit")
# Available DNS providers and their servers
dns_options=("Shecan" "Radar" "Electro" "Begzar" "DNS Pro" "403" "Google" "Cloudflare" "Reset to Default")
declare -A dns_servers=(
["Shecan"]="178.22.122.100 185.51.200.2"
["Radar"]="10.202.10.10 10.202.10.11"
["Electro"]="78.157.42.100 78.157.42.101"
["Begzar"]="185.55.226.26 185.55.226.25"
["DNS Pro"]="87.107.110.109 87.107.110.110"
["403"]="10.202.10.202 10.202.10.102"
["Google"]="8.8.8.8 8.8.4.4"
["Cloudflare"]="1.1.1.1 1.0.0.1"
["Reset to Default"]="127.0.0.53"
)
# Iranian Docker registry mirrors
registry_proxies=(
"docker.kernel.ir"
"focker.ir"
"registry.docker.ir"
"docker.arvancloud.ir"
"docker.haiocloud.com"
"docker.iranserver.com"
)
# DNS Management Functions
backup_resolv() {
cp /etc/resolv.conf "/etc/resolv.conf.bak.$(date +%Y%m%d_%H%M%S)"
}
# Set DNS servers based on user selection
set_dns() {
echo
for i in "${!dns_options[@]}"; do
echo " $((i + 1))) ${dns_options[$i]}"
done
echo " 0) Back"
echo
read -rp "Select DNS (0-${#dns_options[@]}): " dns_choice
if [[ "$dns_choice" == "0" ]]; then return; fi
if [[ ! "$dns_choice" =~ ^[0-9]+$ ]] || (( dns_choice < 1 || dns_choice > ${#dns_options[@]} )); then
echo -e "${RED}Invalid DNS option${NC}"; return
fi
provider="${dns_options[$((dns_choice - 1))]}"
dns_list="${dns_servers[$provider]}"
# Create backup before making changes
backup_resolv
# Write new DNS configuration
{
echo "# DNS updated on $(date) by iran-docker script"
for dns in $dns_list; do
echo "nameserver $dns"
done
if [ "$provider" != "Reset to Default" ]; then
echo "options edns0 trust-ad"
grep "^search" /etc/resolv.conf 2>/dev/null
fi
} > /etc/resolv.conf
echo -e "${GREEN}DNS updated to:${NC} $provider"
}
# Docker Management Functions
install_docker() {
# Check if Docker is already installed
if command -v docker >/dev/null 2>&1; then
version=$(docker version --format '{{.Server.Version}}' 2>/dev/null)
if [ -n "$version" ]; then
echo -e "${GREEN}Docker is already installed. Version: $version${NC}"
return
fi
fi
echo -e "${CYAN}Starting Docker installation...${NC}"
# Update package lists
echo -e "${GREEN}Updating package lists...${NC}"
if ! apt-get update -qq >/dev/null 2>&1; then
echo -e "${RED}Error:${NC} Failed to update package lists."
return 1
fi
# Upgrade system packages
echo -e "${GREEN}Upgrading system packages...${NC}"
if ! apt-get upgrade -y -qq >/dev/null 2>&1; then
echo -e "${RED}Error:${NC} Failed to upgrade packages."
return 1
fi
# Install required dependencies
echo -e "${GREEN}Installing required packages (curl)...${NC}"
if ! apt-get install -y -qq curl >/dev/null 2>&1; then
echo -e "${RED}Error:${NC} Failed to install prerequisites."
return 1
fi
# Download and run Docker installation script
echo -e "${GREEN}Downloading and installing Docker...${NC}"
if ! curl -fsSL https://get.docker.com | sh >/dev/null 2>&1; then
echo -e "${RED}Error:${NC} Docker installation script failed."
return 1
fi
# Verify Docker installation
if ! command -v docker >/dev/null 2>&1; then
echo -e "${RED}Error:${NC} Docker command not found after installation."
return 1
fi
# Get and display Docker version
version=$(docker version --format '{{.Server.Version}}' 2>/dev/null)
if [ -z "$version" ]; then
echo -e "${RED}Error:${NC} Could not retrieve Docker version."
return 1
fi
echo -e "${GREEN}Docker installed successfully. Version: $version${NC}"
}
# Update Docker to the latest version
update_docker() {
# Check if Docker is installed
if ! command -v docker >/dev/null 2>&1; then
echo -e "${RED}Docker is not installed.${NC} Please install it first."
return
fi
echo -e "${CYAN}Updating Docker to the latest version...${NC}"
# Download and run Docker installation script (also works for updates)
echo -e "${GREEN}Downloading and installing Docker...${NC}"
if ! curl -fsSL https://get.docker.com | sh >/dev/null 2>&1; then
echo -e "${RED}Error:${NC} Docker update script failed."
return 1
fi
# Display updated version
version=$(docker version --format '{{.Server.Version}}' 2>/dev/null)
echo -e "${GREEN}Docker updated successfully. Version: $version${NC}"
}
# Configure Docker to use Iranian registry mirrors
set_docker_proxy() {
echo
echo -e "${CYAN}Select Docker Registry Mirror:${NC}"
for i in "${!registry_proxies[@]}"; do
echo " $((i + 1))) https://${registry_proxies[$i]}"
done
echo " 0) Back"
echo
read -rp "Select (0-${#registry_proxies[@]}): " proxy_choice
if [[ "$proxy_choice" == "0" ]]; then return; fi
if [[ ! "$proxy_choice" =~ ^[0-9]+$ ]] || (( proxy_choice < 1 || proxy_choice > ${#registry_proxies[@]} )); then
echo -e "${RED}Invalid option${NC}"; return
fi
mirror="${registry_proxies[$((proxy_choice - 1))]}"
# Create Docker configuration directory
mkdir -p /etc/docker
# Create daemon.json with registry mirror configuration
echo -e "{\n \"registry-mirrors\": [\"https://$mirror\"]\n}" > /etc/docker/daemon.json
# Restart Docker service to apply changes
systemctl restart docker
echo -e "${GREEN}Docker proxy set to:${NC} $mirror"
}
# Main Menu and Program Entry Point
main_menu() {
while true; do
echo
echo -e "${CYAN}Main Menu:${NC}"
for i in "${!main_menu_items[@]}"; do
echo " $((i + 1))) ${main_menu_items[$i]}"
done
echo
read -rp "Select an option (1-${#main_menu_items[@]}): " choice
case "$choice" in
1) set_dns ;;
2) install_docker ;;
3) update_docker ;;
4) set_docker_proxy ;;
5) echo -e "${CYAN}Bye.${NC}"; exit 0 ;;
*) echo -e "${RED}Invalid choice${NC}" ;;
esac
done
}
# Start the program
main_menu