Skip to content

Commit 3f4a33b

Browse files
committed
chore: Add diagnostic information
1 parent 496e03c commit 3f4a33b

File tree

2 files changed

+179
-15
lines changed

2 files changed

+179
-15
lines changed

docker-backup.sh

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,8 @@ create_backup_summary() {
409409
local backup_dir="$1"
410410
local container_name="$2"
411411

412+
log_info ">> 开始创建备份摘要: $container_name"
413+
412414
cat > "${backup_dir}/backup_summary.txt" << EOF
413415
Docker容器备份摘要
414416
==================
@@ -431,6 +433,8 @@ $([ "${FULL_BACKUP}" == true ] && echo "- 容器镜像 ✓" || echo "- 容器镜
431433
432434
备份大小: $(du -sh "${backup_dir}" 2>/dev/null | cut -f1 || echo "计算中...")
433435
EOF
436+
437+
log_info ">> 备份摘要创建完成: $container_name"
434438
}
435439

436440
# 备份单个容器
@@ -447,18 +451,37 @@ backup_container() {
447451
local container_backup_dir=$(create_backup_structure "${BACKUP_DIR}" "${container_name}")
448452

449453
# 执行各项备份任务
454+
log_info ">> 步骤1: 开始备份容器配置"
450455
backup_container_config "${container_name}" "${container_backup_dir}"
456+
log_info ">> 步骤1完成: 容器配置备份完成"
457+
458+
log_info ">> 步骤2: 开始备份挂载点"
451459
backup_mounts "${container_name}" "${container_backup_dir}"
460+
log_info ">> 步骤2完成: 挂载点备份完成"
461+
462+
log_info ">> 步骤3: 开始备份数据卷"
452463
backup_volumes "${container_name}" "${container_backup_dir}"
464+
log_info ">> 步骤3完成: 数据卷备份完成"
465+
466+
log_info ">> 步骤4: 开始备份镜像"
453467
backup_image "${container_name}" "${container_backup_dir}"
468+
log_info ">> 步骤4完成: 镜像备份完成"
469+
470+
log_info ">> 步骤5: 开始备份日志"
454471
backup_logs "${container_name}" "${container_backup_dir}"
472+
log_info ">> 步骤5完成: 日志备份完成"
455473

456474
# 创建恢复脚本和摘要
475+
log_info ">> 步骤6: 开始创建恢复脚本"
457476
create_restore_script "${container_backup_dir}" "${container_name}"
477+
log_info ">> 步骤6完成: 恢复脚本创建完成"
478+
479+
log_info ">> 步骤7: 开始创建备份摘要"
458480
create_backup_summary "${container_backup_dir}" "${container_name}"
481+
log_info ">> 步骤7完成: 备份摘要创建完成"
459482

460483
log_success "容器 '${container_name}' 备份完成: ${container_backup_dir}"
461-
log_debug "备份函数正常返回,准备处理下一个容器"
484+
log_info ">> 备份函数正常返回,准备处理下一个容器"
462485

463486
return 0
464487
}
@@ -500,21 +523,12 @@ main() {
500523
fi
501524

502525
log_info "将备份 ${#containers_to_backup[@]} 个容器: ${containers_to_backup[*]}"
503-
504-
505-
# 调试信息:显示每个容器
506-
if [[ "$VERBOSE" == true ]]; then
507-
for i in "${!containers_to_backup[@]}"; do
508-
log_debug "容器 $((i+1)): '${containers_to_backup[i]}'"
509-
done
510-
fi
511526

512-
# 调试信息:显示每个容器
513-
if [[ "$VERBOSE" == true ]]; then
514-
for i in "${!containers_to_backup[@]}"; do
515-
log_debug "容器 $((i+1)): '${containers_to_backup[i]}'"
516-
done
517-
fi
527+
# 显示容器列表详细信息
528+
log_info "容器详细列表:"
529+
for i in "${!containers_to_backup[@]}"; do
530+
log_info " [$((i+1))/${#containers_to_backup[@]}] ${containers_to_backup[i]}"
531+
done
518532

519533
# 备份每个容器
520534
local success_count=0

simple-test.sh

Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
#!/bin/bash
2+
3+
# 简化的测试脚本,逐步模拟备份过程
4+
set -e
5+
6+
# 基本设置
7+
BACKUP_DIR="/tmp/docker-backups-test"
8+
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
9+
10+
# 颜色定义
11+
RED='\033[0;31m'
12+
GREEN='\033[0;32m'
13+
BLUE='\033[0;34m'
14+
NC='\033[0m'
15+
16+
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
17+
log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
18+
log_error() { echo -e "${RED}[ERROR]${NC} $1" >&2; }
19+
20+
# 获取容器列表
21+
get_containers() {
22+
local containers=$(docker ps --format "{{.Names}}" 2>/dev/null)
23+
if [[ -n "$containers" ]]; then
24+
echo "$containers"
25+
else
26+
log_error "未找到运行中的容器"
27+
return 1
28+
fi
29+
}
30+
31+
# 模拟备份单个容器的关键步骤
32+
test_backup_container() {
33+
local container_name="$1"
34+
local container_backup_dir="$2"
35+
36+
log_info "测试备份容器: ${container_name}"
37+
38+
# 步骤1:创建备份目录
39+
echo " 步骤1: 创建备份目录"
40+
mkdir -p "${container_backup_dir}"/{config,volumes,mounts,logs}
41+
42+
# 步骤2:备份配置
43+
echo " 步骤2: 备份容器配置"
44+
if docker inspect "${container_name}" > "${container_backup_dir}/config/container_inspect.json" 2>/dev/null; then
45+
echo " ✓ 配置备份成功"
46+
else
47+
echo " ✗ 配置备份失败"
48+
return 1
49+
fi
50+
51+
# 步骤3:获取挂载信息
52+
echo " 步骤3: 获取挂载信息"
53+
if docker inspect --format='{{json .Mounts}}' "${container_name}" > "${container_backup_dir}/config/mounts.json" 2>/dev/null; then
54+
echo " ✓ 挂载信息获取成功"
55+
else
56+
echo " ✗ 挂载信息获取失败"
57+
fi
58+
59+
# 步骤4:收集日志
60+
echo " 步骤4: 收集容器日志"
61+
if docker logs --tail 100 "${container_name}" > "${container_backup_dir}/logs/container.log" 2>&1; then
62+
echo " ✓ 日志收集成功"
63+
else
64+
echo " ✗ 日志收集失败"
65+
fi
66+
67+
# 步骤5:创建恢复脚本
68+
echo " 步骤5: 创建恢复脚本"
69+
cat > "${container_backup_dir}/restore.sh" << 'EOF'
70+
#!/bin/bash
71+
echo "这是一个测试恢复脚本"
72+
EOF
73+
chmod +x "${container_backup_dir}/restore.sh"
74+
echo " ✓ 恢复脚本创建成功"
75+
76+
# 步骤6:创建摘要(这里是问题可能出现的地方)
77+
echo " 步骤6: 创建备份摘要"
78+
cat > "${container_backup_dir}/backup_summary.txt" << EOF
79+
Docker容器备份摘要
80+
==================
81+
82+
备份时间: $(date)
83+
容器名称: ${container_name}
84+
备份目录: ${container_backup_dir}
85+
86+
备份大小: $(du -sh "${container_backup_dir}" 2>/dev/null | cut -f1 || echo "计算中...")
87+
EOF
88+
echo " ✓ 备份摘要创建成功"
89+
90+
log_success "容器 '${container_name}' 测试备份完成"
91+
echo " → 函数正常返回"
92+
93+
return 0
94+
}
95+
96+
# 主函数
97+
main() {
98+
log_info "开始简化备份测试..."
99+
100+
# 创建备份目录
101+
mkdir -p "$BACKUP_DIR"
102+
103+
# 获取容器列表
104+
local containers_to_backup
105+
mapfile -t containers_to_backup < <(get_containers)
106+
107+
if [[ ${#containers_to_backup[@]} -eq 0 ]]; then
108+
log_error "未找到要备份的容器"
109+
exit 1
110+
fi
111+
112+
log_info "找到 ${#containers_to_backup[@]} 个容器: ${containers_to_backup[*]}"
113+
114+
# 处理每个容器
115+
local success_count=0
116+
local total_count=${#containers_to_backup[@]}
117+
118+
for container in "${containers_to_backup[@]}"; do
119+
local container_backup_dir="${BACKUP_DIR}/${container}_${TIMESTAMP}"
120+
121+
log_info "[$((success_count + 1))/$total_count] 开始处理: $container"
122+
123+
if test_backup_container "$container" "$container_backup_dir"; then
124+
((success_count++))
125+
log_info "✓ 容器 '$container' 处理成功 ($success_count/$total_count)"
126+
else
127+
log_error "✗ 容器 '$container' 处理失败"
128+
fi
129+
130+
echo "---"
131+
132+
# 为了调试,只处理前3个容器
133+
if [[ $success_count -ge 3 ]]; then
134+
log_info "调试模式:只处理前3个容器"
135+
break
136+
fi
137+
done
138+
139+
echo
140+
log_success "测试完成!"
141+
log_info "成功处理: $success_count/$total_count 个容器"
142+
log_info "测试结果保存在: $BACKUP_DIR"
143+
144+
echo
145+
echo "如果这个测试脚本能正常处理多个容器,说明问题在原脚本的某个特定函数中。"
146+
echo "如果这个测试也只处理一个容器,说明是系统级别的问题。"
147+
}
148+
149+
# 运行测试
150+
main "$@"

0 commit comments

Comments
 (0)