嗯,优化了显示顺序与部署逻辑的全新Deploy.sh 2.0
This commit is contained in:
@@ -186,6 +186,33 @@ install_jq() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# ---------- 镜像加速:确保 daemon.json 存在且有效 ----------
|
||||||
|
ensure_daemon_json_valid() {
|
||||||
|
if [ -f "$DAEMON_JSON" ] && [ -s "$DAEMON_JSON" ]; then
|
||||||
|
if jq -e '.' "$DAEMON_JSON" >/dev/null 2>&1; then
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
local backup_path="${DAEMON_JSON}.bak.$(date +%Y%m%d-%H%M%S)"
|
||||||
|
cp "$DAEMON_JSON" "$backup_path"
|
||||||
|
print_warn "daemon.json 格式非法,已备份至: $backup_path"
|
||||||
|
echo '{}' > "$DAEMON_JSON"
|
||||||
|
print_info "已重建为有效的 JSON 文件"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
elif [ -f "$DAEMON_JSON" ] && [ ! -s "$DAEMON_JSON" ]; then
|
||||||
|
local backup_path="${DAEMON_JSON}.bak.$(date +%Y%m%d-%H%M%S)"
|
||||||
|
cp "$DAEMON_JSON" "$backup_path" 2>/dev/null || true
|
||||||
|
print_warn "daemon.json 为空文件,已备份至: $backup_path"
|
||||||
|
echo '{}' > "$DAEMON_JSON"
|
||||||
|
print_info "已重建为有效的 JSON 文件"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
print_info "daemon.json 不存在,将创建"
|
||||||
|
echo '{}' > "$DAEMON_JSON"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
# ---------- 镜像加速:检测阶段 ----------
|
# ---------- 镜像加速:检测阶段 ----------
|
||||||
check_docker_mirrors() {
|
check_docker_mirrors() {
|
||||||
print_step "检测 Docker 镜像源配置..."
|
print_step "检测 Docker 镜像源配置..."
|
||||||
@@ -219,7 +246,6 @@ check_docker_mirrors() {
|
|||||||
MIRROR_STATUS="no_file"
|
MIRROR_STATUS="no_file"
|
||||||
HAS_REGISTRY_MIRRORS_KEY=false
|
HAS_REGISTRY_MIRRORS_KEY=false
|
||||||
print_info "daemon.json 不存在"
|
print_info "daemon.json 不存在"
|
||||||
# 生成检测报告
|
|
||||||
generate_mirror_detect_output
|
generate_mirror_detect_output
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
@@ -481,38 +507,122 @@ configure_docker_mirrors() {
|
|||||||
# 构建新镜像列表
|
# 构建新镜像列表
|
||||||
local new_mirrors=()
|
local new_mirrors=()
|
||||||
if [ "$REORDER" = true ]; then
|
if [ "$REORDER" = true ]; then
|
||||||
# 重排:可用前置,不可用后移(仅重排用户配置)
|
|
||||||
new_mirrors=("${USER_MIRRORS_AVAILABLE[@]}" "${USER_MIRRORS_UNAVAILABLE[@]}")
|
new_mirrors=("${USER_MIRRORS_AVAILABLE[@]}" "${USER_MIRRORS_UNAVAILABLE[@]}")
|
||||||
print_info "重排镜像源顺序"
|
print_info "[反馈] 动作: 重排镜像源顺序"
|
||||||
elif [ "$INSERT_DEFAULT" = true ]; then
|
elif [ "$INSERT_DEFAULT" = true ]; then
|
||||||
if [ "$MIRROR_STATUS" = "no_file" ] || [ "$MIRROR_STATUS" = "no_key" ] || [ "$MIRROR_STATUS" = "empty_array" ]; then
|
if [ "$MIRROR_STATUS" = "no_file" ] || [ "$MIRROR_STATUS" = "no_key" ] || [ "$MIRROR_STATUS" = "empty_array" ]; then
|
||||||
# 无配置或空配置:直接写入可用默认地址
|
|
||||||
new_mirrors=("${AVAILABLE_MIRRORS[@]}")
|
new_mirrors=("${AVAILABLE_MIRRORS[@]}")
|
||||||
print_info "写入可用默认镜像源"
|
print_info "[反馈] 动作: 写入可用默认镜像源 (无已有配置)"
|
||||||
else
|
else
|
||||||
# all_invalid:可用默认地址插入到最前面
|
|
||||||
new_mirrors=("${AVAILABLE_MIRRORS[@]}" "${USER_MIRRORS_UNAVAILABLE[@]}")
|
new_mirrors=("${AVAILABLE_MIRRORS[@]}" "${USER_MIRRORS_UNAVAILABLE[@]}")
|
||||||
print_info "插入可用默认镜像源到最前面"
|
print_info "[反馈] 动作: 插入可用默认镜像源到最前面 (用户配置全部不可用)"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
print_info "无需修改镜像源配置"
|
print_info "无需修改镜像源配置"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 备份 daemon.json
|
print_info "[反馈] 新镜像列表: ${new_mirrors[*]}"
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# 确保 daemon.json 存在且为有效 JSON
|
||||||
|
# ============================================================
|
||||||
|
print_info "[反馈] 检查 daemon.json 状态..."
|
||||||
if [ -f "$DAEMON_JSON" ]; then
|
if [ -f "$DAEMON_JSON" ]; then
|
||||||
local backup_path="${DAEMON_JSON}.bak.$(date +%Y%m%d-%H%M%S)"
|
print_info "[反馈] 文件存在: $DAEMON_JSON"
|
||||||
cp "$DAEMON_JSON" "$backup_path"
|
if [ -s "$DAEMON_JSON" ]; then
|
||||||
print_info "已备份: $backup_path"
|
print_info "[反馈] 文件大小: $(stat -c%s "$DAEMON_JSON" 2>/dev/null || stat -f%z "$DAEMON_JSON" 2>/dev/null) bytes"
|
||||||
|
else
|
||||||
|
print_warn "[反馈] 文件为空 (0 bytes)"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
print_info "[反馈] 文件不存在"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 写入新配置(仅修改 registry-mirrors 字段,保留其他所有字段)
|
if ! ensure_daemon_json_valid; then
|
||||||
|
print_error "无法创建或修复 daemon.json"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
print_success "[反馈] daemon.json 已就绪 (有效 JSON)"
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# 备份 daemon.json(写入前额外备份)
|
||||||
|
# ============================================================
|
||||||
|
local backup_path="${DAEMON_JSON}.bak.$(date +%Y%m%d-%H%M%S)"
|
||||||
|
cp "$DAEMON_JSON" "$backup_path"
|
||||||
|
print_info "[反馈] 已备份: $backup_path"
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# 构建 JSON 镜像数组
|
||||||
|
# ============================================================
|
||||||
|
print_info "[反馈] 构建 JSON 镜像数组..."
|
||||||
local json_mirrors
|
local json_mirrors
|
||||||
json_mirrors=$(printf '%s\n' "${new_mirrors[@]}" | jq -R . | jq -s .)
|
json_mirrors=$(printf '%s\n' "${new_mirrors[@]}" | jq -R . | jq -s . 2>/dev/null)
|
||||||
|
if [ -z "$json_mirrors" ] || [ "$json_mirrors" = "[]" ]; then
|
||||||
|
print_error "[反馈] 构建 JSON 镜像数组失败或为空"
|
||||||
|
print_error " new_mirrors 内容: ${new_mirrors[*]}"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
print_info "[反馈] json_mirrors: $json_mirrors"
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# 写入新配置(仅修改 registry-mirrors 字段,保留其他所有字段)
|
||||||
|
# ============================================================
|
||||||
|
print_info "[反馈] 执行 jq 写入操作..."
|
||||||
|
print_info "[反馈] 源文件: $DAEMON_JSON"
|
||||||
|
print_info "[反馈] 目标文件: ${DAEMON_JSON}.tmp"
|
||||||
|
|
||||||
if ! jq --argjson mirrors "$json_mirrors" '."registry-mirrors" = $mirrors' \
|
if ! jq --argjson mirrors "$json_mirrors" '."registry-mirrors" = $mirrors' \
|
||||||
"$DAEMON_JSON" > "${DAEMON_JSON}.tmp" 2>/dev/null; then
|
"$DAEMON_JSON" > "${DAEMON_JSON}.tmp" 2> "${DAEMON_JSON}.error"; then
|
||||||
print_error "写入 daemon.json 失败"
|
print_error "[反馈] jq 执行失败"
|
||||||
|
print_error "[反馈] 错误详情:"
|
||||||
|
if [ -f "${DAEMON_JSON}.error" ]; then
|
||||||
|
cat "${DAEMON_JSON}.error" | while read -r line; do
|
||||||
|
print_error " $line"
|
||||||
|
done
|
||||||
|
rm -f "${DAEMON_JSON}.error"
|
||||||
|
fi
|
||||||
|
print_error "[反馈] 检查文件状态:"
|
||||||
|
if [ -f "$DAEMON_JSON" ]; then
|
||||||
|
print_error " 源文件存在,大小: $(stat -c%s "$DAEMON_JSON" 2>/dev/null || stat -f%z "$DAEMON_JSON" 2>/dev/null) bytes"
|
||||||
|
print_error " 源文件内容预览:"
|
||||||
|
head -c 200 "$DAEMON_JSON" | while read -r line; do
|
||||||
|
print_error " $line"
|
||||||
|
done
|
||||||
|
else
|
||||||
|
print_error " 源文件不存在!"
|
||||||
|
fi
|
||||||
|
if [ -f "${DAEMON_JSON}.tmp" ]; then
|
||||||
|
print_error " 临时文件已创建,大小: $(stat -c%s "${DAEMON_JSON}.tmp" 2>/dev/null || stat -f%z "${DAEMON_JSON}.tmp" 2>/dev/null) bytes"
|
||||||
|
[ -s "${DAEMON_JSON}.tmp" ] && print_error " 临时文件内容: $(cat "${DAEMON_JSON}.tmp")"
|
||||||
|
fi
|
||||||
|
rm -f "${DAEMON_JSON}.tmp"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 验证临时文件
|
||||||
|
if [ ! -f "${DAEMON_JSON}.tmp" ]; then
|
||||||
|
print_error "[反馈] 临时文件未生成: ${DAEMON_JSON}.tmp"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -s "${DAEMON_JSON}.tmp" ]; then
|
||||||
|
print_error "[反馈] 临时文件为空: ${DAEMON_JSON}.tmp"
|
||||||
|
rm -f "${DAEMON_JSON}.tmp"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
print_success "[反馈] jq 执行成功,临时文件已生成 (大小: $(stat -c%s "${DAEMON_JSON}.tmp" 2>/dev/null || stat -f%z "${DAEMON_JSON}.tmp" 2>/dev/null) bytes)"
|
||||||
|
|
||||||
|
# 验证临时文件是否为有效 JSON
|
||||||
|
if ! jq -e '.' "${DAEMON_JSON}.tmp" >/dev/null 2>&1; then
|
||||||
|
print_error "[反馈] 生成的临时文件不是有效的 JSON"
|
||||||
|
print_error "[反馈] 内容预览:"
|
||||||
|
head -c 500 "${DAEMON_JSON}.tmp" | while read -r line; do
|
||||||
|
print_error " $line"
|
||||||
|
done
|
||||||
|
rm -f "${DAEMON_JSON}.tmp"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user