Files
dock/Docker 加速
2025-10-29 21:56:12 +08:00

204 lines
5.6 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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 - <<EOF 2>/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 - <<EOF > "$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