嗯,优化了显示顺序与部署逻辑的全新Deploy.sh 2.0
This commit is contained in:
@@ -186,6 +186,33 @@ install_jq() {
|
||||
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() {
|
||||
print_step "检测 Docker 镜像源配置..."
|
||||
@@ -219,7 +246,6 @@ check_docker_mirrors() {
|
||||
MIRROR_STATUS="no_file"
|
||||
HAS_REGISTRY_MIRRORS_KEY=false
|
||||
print_info "daemon.json 不存在"
|
||||
# 生成检测报告
|
||||
generate_mirror_detect_output
|
||||
return 0
|
||||
fi
|
||||
@@ -481,38 +507,122 @@ configure_docker_mirrors() {
|
||||
# 构建新镜像列表
|
||||
local new_mirrors=()
|
||||
if [ "$REORDER" = true ]; then
|
||||
# 重排:可用前置,不可用后移(仅重排用户配置)
|
||||
new_mirrors=("${USER_MIRRORS_AVAILABLE[@]}" "${USER_MIRRORS_UNAVAILABLE[@]}")
|
||||
print_info "重排镜像源顺序"
|
||||
print_info "[反馈] 动作: 重排镜像源顺序"
|
||||
elif [ "$INSERT_DEFAULT" = true ]; then
|
||||
if [ "$MIRROR_STATUS" = "no_file" ] || [ "$MIRROR_STATUS" = "no_key" ] || [ "$MIRROR_STATUS" = "empty_array" ]; then
|
||||
# 无配置或空配置:直接写入可用默认地址
|
||||
new_mirrors=("${AVAILABLE_MIRRORS[@]}")
|
||||
print_info "写入可用默认镜像源"
|
||||
print_info "[反馈] 动作: 写入可用默认镜像源 (无已有配置)"
|
||||
else
|
||||
# all_invalid:可用默认地址插入到最前面
|
||||
new_mirrors=("${AVAILABLE_MIRRORS[@]}" "${USER_MIRRORS_UNAVAILABLE[@]}")
|
||||
print_info "插入可用默认镜像源到最前面"
|
||||
print_info "[反馈] 动作: 插入可用默认镜像源到最前面 (用户配置全部不可用)"
|
||||
fi
|
||||
else
|
||||
print_info "无需修改镜像源配置"
|
||||
return 0
|
||||
fi
|
||||
|
||||
# 备份 daemon.json
|
||||
print_info "[反馈] 新镜像列表: ${new_mirrors[*]}"
|
||||
|
||||
# ============================================================
|
||||
# 确保 daemon.json 存在且为有效 JSON
|
||||
# ============================================================
|
||||
print_info "[反馈] 检查 daemon.json 状态..."
|
||||
if [ -f "$DAEMON_JSON" ]; then
|
||||
local backup_path="${DAEMON_JSON}.bak.$(date +%Y%m%d-%H%M%S)"
|
||||
cp "$DAEMON_JSON" "$backup_path"
|
||||
print_info "已备份: $backup_path"
|
||||
print_info "[反馈] 文件存在: $DAEMON_JSON"
|
||||
if [ -s "$DAEMON_JSON" ]; then
|
||||
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
|
||||
|
||||
# 写入新配置(仅修改 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
|
||||
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' \
|
||||
"$DAEMON_JSON" > "${DAEMON_JSON}.tmp" 2>/dev/null; then
|
||||
print_error "写入 daemon.json 失败"
|
||||
"$DAEMON_JSON" > "${DAEMON_JSON}.tmp" 2> "${DAEMON_JSON}.error"; then
|
||||
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
|
||||
fi
|
||||
|
||||
|
||||
Reference in New Issue
Block a user