You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
wormhole-server/scripts/setup-docker-proxy.sh

248 lines
6.5 KiB

#!/bin/bash
# Docker SOCKS5 代理配置脚本
# 用法: ./scripts/setup-docker-proxy.sh [SOCKS5地址] [用户名] [密码]
set -e
# 默认配置
SOCKS5_HOST=${1:-"127.0.0.1"}
SOCKS5_PORT=${2:-"1080"}
USERNAME=${3:-"admin"}
PASSWORD=${4:-"secure123"}
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
log_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查操作系统
detect_os() {
if [[ "$OSTYPE" == "darwin"* ]]; then
echo "macos"
elif [[ "$OSTYPE" == "linux-gnu"* ]]; then
echo "linux"
else
echo "unknown"
fi
}
# 配置Docker Desktop (macOS/Windows)
configure_docker_desktop() {
log_info "配置Docker Desktop代理设置..."
# Docker Desktop配置文件路径
if [[ "$(detect_os)" == "macos" ]]; then
DOCKER_CONFIG_DIR="$HOME/.docker"
else
DOCKER_CONFIG_DIR="$HOME/.docker"
fi
mkdir -p "$DOCKER_CONFIG_DIR"
# 创建daemon.json配置
cat > "$DOCKER_CONFIG_DIR/daemon.json" << EOF
{
"proxies": {
"default": {
"httpProxy": "socks5://${USERNAME}:${PASSWORD}@${SOCKS5_HOST}:${SOCKS5_PORT}",
"httpsProxy": "socks5://${USERNAME}:${PASSWORD}@${SOCKS5_HOST}:${SOCKS5_PORT}",
"noProxy": "localhost,127.0.0.1,*.local"
}
},
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com"
]
}
EOF
log_success "Docker daemon.json 配置已创建: $DOCKER_CONFIG_DIR/daemon.json"
}
# 配置Docker客户端
configure_docker_client() {
log_info "配置Docker客户端代理设置..."
DOCKER_CONFIG_DIR="$HOME/.docker"
mkdir -p "$DOCKER_CONFIG_DIR"
# 创建config.json配置
cat > "$DOCKER_CONFIG_DIR/config.json" << EOF
{
"proxies": {
"default": {
"httpProxy": "socks5://${USERNAME}:${PASSWORD}@${SOCKS5_HOST}:${SOCKS5_PORT}",
"httpsProxy": "socks5://${USERNAME}:${PASSWORD}@${SOCKS5_HOST}:${SOCKS5_PORT}",
"noProxy": "localhost,127.0.0.1,*.local"
}
}
}
EOF
log_success "Docker 客户端配置已创建: $DOCKER_CONFIG_DIR/config.json"
}
# 配置systemd服务 (Linux)
configure_docker_systemd() {
log_info "配置Docker systemd服务代理..."
DOCKER_SERVICE_DIR="/etc/systemd/system/docker.service.d"
if [[ ! -d "$DOCKER_SERVICE_DIR" ]]; then
log_info "创建Docker服务目录: $DOCKER_SERVICE_DIR"
sudo mkdir -p "$DOCKER_SERVICE_DIR"
fi
# 创建代理配置文件
sudo tee "$DOCKER_SERVICE_DIR/proxy.conf" > /dev/null << EOF
[Service]
Environment="HTTP_PROXY=socks5://${USERNAME}:${PASSWORD}@${SOCKS5_HOST}:${SOCKS5_PORT}"
Environment="HTTPS_PROXY=socks5://${USERNAME}:${PASSWORD}@${SOCKS5_HOST}:${SOCKS5_PORT}"
Environment="NO_PROXY=localhost,127.0.0.1,*.local"
EOF
log_success "Docker systemd 代理配置已创建"
# 重新加载配置
log_info "重新加载systemd配置..."
sudo systemctl daemon-reload
sudo systemctl restart docker
log_success "Docker服务已重启"
}
# 设置环境变量
setup_env_vars() {
log_info "设置环境变量..."
cat << EOF
# 添加以下环境变量到您的 ~/.bashrc 或 ~/.zshrc:
export HTTP_PROXY=socks5://${USERNAME}:${PASSWORD}@${SOCKS5_HOST}:${SOCKS5_PORT}
export HTTPS_PROXY=socks5://${USERNAME}:${PASSWORD}@${SOCKS5_HOST}:${SOCKS5_PORT}
export NO_PROXY=localhost,127.0.0.1,*.local
# 或者临时设置 (当前shell有效):
EOF
echo "export HTTP_PROXY=socks5://${USERNAME}:${PASSWORD}@${SOCKS5_HOST}:${SOCKS5_PORT}"
echo "export HTTPS_PROXY=socks5://${USERNAME}:${PASSWORD}@${SOCKS5_HOST}:${SOCKS5_PORT}"
echo "export NO_PROXY=localhost,127.0.0.1,*.local"
}
# 测试连接
test_connection() {
log_info "测试SOCKS5连接..."
# 测试SOCKS5代理是否可用
if command -v curl &> /dev/null; then
if curl --socks5 "${USERNAME}:${PASSWORD}@${SOCKS5_HOST}:${SOCKS5_PORT}" \
--connect-timeout 10 \
-s https://registry-1.docker.io/v2/ > /dev/null; then
log_success "SOCKS5代理连接测试成功"
else
log_error "SOCKS5代理连接测试失败"
return 1
fi
else
log_warn "curl未安装,跳过连接测试"
fi
}
# 显示帮助信息
show_help() {
echo "Docker SOCKS5 代理配置脚本"
echo ""
echo "用法:"
echo " $0 [SOCKS5地址] [端口] [用户名] [密码]"
echo ""
echo "参数:"
echo " SOCKS5地址 SOCKS5服务器地址 (默认: 127.0.0.1)"
echo " 端口 SOCKS5服务器端口 (默认: 1080)"
echo " 用户名 认证用户名 (默认: admin)"
echo " 密码 认证密码 (默认: secure123)"
echo ""
echo "示例:"
echo " $0 # 使用默认配置"
echo " $0 192.168.1.100 1080 user pass # 自定义配置"
}
# 主函数
main() {
echo "=============================================="
echo " Docker SOCKS5 代理配置脚本"
echo "=============================================="
echo ""
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
show_help
exit 0
fi
log_info "SOCKS5服务器: ${SOCKS5_HOST}:${SOCKS5_PORT}"
log_info "认证信息: ${USERNAME}:${PASSWORD}"
echo ""
# 测试连接
if ! test_connection; then
log_error "请确保SOCKS5服务器正在运行并且配置正确"
exit 1
fi
# 检测操作系统并配置
OS=$(detect_os)
case $OS in
"macos")
log_info "检测到macOS系统"
configure_docker_desktop
configure_docker_client
;;
"linux")
log_info "检测到Linux系统"
configure_docker_client
if systemctl is-active --quiet docker; then
configure_docker_systemd
else
log_warn "Docker服务未运行,跳过systemd配置"
fi
;;
*)
log_warn "未知操作系统,仅配置客户端"
configure_docker_client
;;
esac
echo ""
setup_env_vars
echo ""
log_success "Docker代理配置完成!"
log_info "请重启Docker Desktop或执行 'sudo systemctl restart docker' 使配置生效"
echo ""
echo "测试命令:"
echo " docker pull hello-world"
echo " docker run hello-world"
}
# 运行主函数
main "$@"