From 0a3b917640704eef39ab66de6f1df95b89b40347 Mon Sep 17 00:00:00 2001 From: xzx3344521 Date: Wed, 29 Oct 2025 21:56:12 +0800 Subject: [PATCH] =?UTF-8?q?Create=20Docker=20=E5=8A=A0=E9=80=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Docker 加速 | 203 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 203 insertions(+) create mode 100644 Docker 加速 diff --git a/Docker 加速 b/Docker 加速 new file mode 100644 index 0000000..34df153 --- /dev/null +++ b/Docker 加速 @@ -0,0 +1,203 @@ +#!/bin/bash + +# Docker 加速器域名 +ACCELERATOR_DOMAIN="github.vps7k7k.xyz" + +# 颜色定义 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +echo -e "${BLUE}=== Docker 加速源一键更换脚本 ===${NC}" +echo -e "${YELLOW}加速器域名: ${ACCELERATOR_DOMAIN}${NC}" +echo + +# 函数:显示当前Docker配置 +show_current_config() { + echo -e "${GREEN}当前Docker配置:${NC}" + + if [ -f /etc/docker/daemon.json ]; then + echo -e "${YELLOW}/etc/docker/daemon.json 内容:${NC}" + cat /etc/docker/daemon.json 2>/dev/null | python -m json.tool 2>/dev/null || cat /etc/docker/daemon.json + else + echo -e "${RED}/etc/docker/daemon.json 文件不存在${NC}" + fi + + echo + if command -v docker &> /dev/null; then + echo -e "${YELLOW}Docker info 中的Registry mirrors:${NC}" + docker info 2>/dev/null | grep -A 10 "Registry Mirrors" || echo "无法获取或未设置镜像加速" + else + echo -e "${RED}Docker 未安装或未运行${NC}" + fi + echo +} + +# 函数:备份原有配置 +backup_config() { + local backup_file="/etc/docker/daemon.json.backup.$(date +%Y%m%d_%H%M%S)" + if [ -f /etc/docker/daemon.json ]; then + cp /etc/docker/daemon.json "$backup_file" + echo -e "${GREEN}已备份原配置到: $backup_file${NC}" + fi +} + +# 函数:设置加速源 +setup_accelerator() { + local temp_file=$(mktemp) + + # 创建新的daemon.json配置 + cat > "$temp_file" << EOF +{ + "registry-mirrors": [ + "https://${ACCELERATOR_DOMAIN}" + ], + "dns": ["8.8.8.8", "114.114.114.114"] +} +EOF + + # 如果已有daemon.json,合并配置 + if [ -f /etc/docker/daemon.json ]; then + echo -e "${YELLOW}检测到已有配置,进行合并...${NC}" + python3 - </dev/null || jq -s '.[0] * .[1]' /etc/docker/daemon.json "$temp_file" 2>/dev/null +import json +import sys + +with open('/etc/docker/daemon.json', 'r') as f: + old_config = json.load(f) + +with open('$temp_file', 'r') as f: + new_config = json.load(f) + +# 合并配置,优先使用新配置的registry-mirrors +merged_config = {**old_config, **new_config} +merged_config['registry-mirrors'] = new_config['registry-mirrors'] + +print(json.dumps(merged_config, indent=2)) +EOF + if [ $? -eq 0 ]; then + python3 - < "$temp_file" +import json +import sys + +with open('/etc/docker/daemon.json', 'r') as f: + old_config = json.load(f) + +with open('$temp_file', 'r') as f: + new_config = json.load(f) + +# 合并配置,优先使用新配置的registry-mirrors +merged_config = {**old_config, **new_config} +merged_config['registry-mirrors'] = new_config['registry-mirrors'] + +print(json.dumps(merged_config, indent=2)) +EOF + fi + fi + + # 移动新配置到目标位置 + sudo mv "$temp_file" /etc/docker/daemon.json + sudo chmod 600 /etc/docker/daemon.json +} + +# 函数:重启Docker服务 +restart_docker() { + echo -e "${YELLOW}重启Docker服务...${NC}" + + if command -v systemctl &> /dev/null; then + sudo systemctl daemon-reload + sudo systemctl restart docker + elif command -v service &> /dev/null; then + sudo service docker restart + else + echo -e "${RED}无法确定如何重启Docker服务${NC}" + return 1 + fi + + # 等待Docker启动 + sleep 3 + + if sudo docker ps &> /dev/null; then + echo -e "${GREEN}Docker 服务重启成功${NC}" + return 0 + else + echo -e "${RED}Docker 服务重启失败${NC}" + return 1 + fi +} + +# 函数:验证加速器 +verify_accelerator() { + echo -e "${YELLOW}验证加速器配置...${NC}" + + if docker info 2>/dev/null | grep -q "${ACCELERATOR_DOMAIN}"; then + echo -e "${GREEN}✓ 加速器配置成功${NC}" + echo -e "${BLUE}加速器地址: https://${ACCELERATOR_DOMAIN}${NC}" + else + echo -e "${RED}✗ 加速器配置可能未生效${NC}" + fi +} + +# 函数:显示使用示例 +show_usage_examples() { + echo -e "${GREEN}使用示例:${NC}" + echo -e " ${YELLOW}Docker 官方镜像:${NC}" + echo -e " docker pull ${ACCELERATOR_DOMAIN}/nginx" + echo -e " ${YELLOW}Docker Hub 用户镜像:${NC}" + echo -e " docker pull ${ACCELERATOR_DOMAIN}/user/image" + echo -e " ${YELLOW}GHCR 镜像:${NC}" + echo -e " docker pull ${ACCELERATOR_DOMAIN}/ghcr.io/user/image" + echo -e " ${YELLOW}Quay.io 镜像:${NC}" + echo -e " docker pull ${ACCELERATOR_DOMAIN}/quay.io/org/image" + echo -e " ${YELLOW}Kubernetes 镜像:${NC}" + echo -e " docker pull ${ACCELERATOR_DOMAIN}/registry.k8s.io/pause:3.8" + echo + echo -e "${BLUE}注意: 使用加速器时,需要在镜像前加上加速器域名${NC}" +} + +# 主函数 +main() { + # 显示当前配置 + show_current_config + + # 确认操作 + read -p "是否继续设置加速源? (y/N): " confirm + if [[ ! "$confirm" =~ ^[Yy]$ ]]; then + echo -e "${YELLOW}已取消操作${NC}" + exit 0 + fi + + echo + + # 检查Docker是否安装 + if ! command -v docker &> /dev/null; then + echo -e "${RED}错误: Docker 未安装${NC}" + exit 1 + fi + + # 检查是否以root权限运行 + if [[ $EUID -eq 0 ]]; then + echo -e "${RED}警告: 不建议以root用户运行此脚本${NC}" + read -p "是否继续? (y/N): " root_confirm + if [[ ! "$root_confirm" =~ ^[Yy]$ ]]; then + exit 0 + fi + fi + + # 执行配置流程 + backup_config + setup_accelerator + + if restart_docker; then + verify_accelerator + echo + show_usage_examples + else + echo -e "${RED}配置失败,请检查Docker服务状态${NC}" + fi +} + +# 运行主函数 +main