#!/usr/bin/env zsh prepare_docker_build_proxy() { # Desktop and remote/rootless daemons are managed in their own environment. docker_uses_local_engine || return 0 docker_desktop_present && return 0 local python_bin="$(command -v python3)" local helper="$SCRIPT_DIR/scripts/docker_proxy.py" local plan_file error_file local mode changed connected status_text if [ -z "$python_bin" ] || ! plan_file="$(mktemp "$PLANET_STATE_DIR/docker-proxy.XXXXXX")"; then log_error "Docker 构建代理检测失败" return 1 fi error_file="${plan_file}.error" chmod 600 "$plan_file" : > "$error_file" chmod 600 "$error_file" { if ! "$python_bin" "$helper" plan > "$plan_file" 2> "$error_file"; then log_error "Docker 构建代理检测失败" "$error_file" return 1 fi if ! status_text="$("$python_bin" "$helper" status < "$plan_file" 2> "$error_file")"; then log_error "Docker 构建代理检测失败" "$error_file" return 1 fi read -r mode changed connected <<< "$status_text" if [ "$changed" -eq 1 ]; then docker_require_sudo || return 1 log_note "更新 Docker 构建代理配置,重启后恢复原先运行的容器" if ! docker_as_root "$python_bin" "$helper" apply < "$plan_file" 2> "$error_file"; then log_error "Docker 构建代理更新失败" "$error_file" return 1 fi fi if [ "$connected" -ne 1 ]; then log_error "PLANET_PROXY_NO_ROUTE" return 1 fi if [ "$mode" = proxy ]; then log_note "Docker 构建使用已验证可用的主机代理" else log_note "未发现可用主机代理,Docker 构建使用直连" fi } always { rm -f -- "$plan_file" "$error_file" } }