LogLInk1K commited on
Commit
63b4e7a
·
verified ·
1 Parent(s): 2add0ae

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +31 -33
Dockerfile CHANGED
@@ -8,32 +8,28 @@ CMD sh -c "\
8
  ./openlist server & \
9
  PID=\$!; \
10
  \
11
- # 2. 等待并检查服务是否真的启动成功
12
  echo '⏳ 正在等待 OpenList 服务启动...'; \
13
- echo ''; \
14
- sleep 5; \
15
  \
16
  MAX_RETRIES=10; \
17
  while ! wget -q --spider http://127.0.0.1:5244/api/public/settings; do \
18
  sleep 2; \
19
  MAX_RETRIES=\$((MAX_RETRIES - 1)); \
20
  if [ \$MAX_RETRIES -le 0 ]; then \
21
- echo ''; \
22
- echo '❌ 错误: 服务启动超时,请检查日志。'; \
23
- exit 1; \
24
  fi; \
25
  done; \
26
- echo ''; \
27
  echo '✅ 服务已就绪!'; \
28
- echo ''; \
29
  \
30
- # 3. 环境变量及密码有效性强校验
31
  if [ -z \"\$OPENLIST_ADMIN_PASSWORD\" ]; then \
32
- echo '❌ 错误: 未检测到 OPENLIST_ADMIN_PASSWORD。请在 Secrets 中配置!'; \
33
  wait \$PID; exit 1; \
34
  fi; \
35
  \
36
- # 4. 获取 Token
37
  echo '🔑 正在获取 Token...'; \
38
  RAW_TOKEN=\$(wget -qO- --timeout=5 --post-data=\"{\\\"username\\\":\\\"admin\\\",\\\"password\\\":\\\"\$OPENLIST_ADMIN_PASSWORD\\\"}\" \
39
  --header='Content-Type: application/json' \
@@ -41,42 +37,44 @@ CMD sh -c "\
41
  \
42
  TOKEN=\$(echo \$RAW_TOKEN | grep -o '\"token\":\"[^\"]*\"' | cut -d'\"' -f4); \
43
  \
44
- # 5. 执行注入逻辑
45
  if [ -n \"\$TOKEN\" ] && [ \"\${#TOKEN}\" -gt 20 ]; then \
46
- echo '🚀 登录成功,正在解析配置...'; \
47
- echo ''; \
48
  FOUND_VALID=0; \
 
49
  for i in 1 2 3 4 5 6 7 8 9 10; do \
50
- eval JSON=\\\$STORAGE_JSON_\$i; \
 
51
  \
52
- if [ -z \"\$JSON\" ]; then \
53
  continue; \
54
  fi; \
55
  \
56
  FOUND_VALID=1; \
57
- if echo \"\$JSON\" | grep -qv '\"mount_path\"'; then \
58
- echo \"⚠️ 错误: STORAGE_JSON_\$i 已检测到但内容格式错误(缺少 mount_path),已跳过。\"; \
59
- echo \"💡 提示: 请检查是否填入了正确的 JSON 字符串。\"; \
60
- continue; \
 
 
61
  fi; \
62
  \
63
- echo \"📦 正在添加第 \$i 个存储配置...\"; \
64
- RES=\$(wget -qO- --timeout=5 --post-data=\"\$JSON\" \
65
- --header=\"Content-Type: application/json\" \
66
- --header=\"Authorization: \$TOKEN\" \
67
- http://127.0.0.1:5244/api/admin/storage/create); \
68
- echo \"\$RES\"; \
 
 
 
69
  echo ''; \
70
  done; \
71
  \
72
- if [ \"\$FOUND_VALID\" -eq 0 ]; then \
73
- echo 'ℹ️ 提示: 未发现有效的存储配置。'; \
74
- echo '👉 请检查 Secrets 中的 STORAGE_JSON_x 是否已填入内容,且变量名拼写正确。'; \
75
- fi; \
76
- echo '✅ 所有存储处理完成!'; \
77
  else \
78
- echo '❌ 登录失败!'; \
79
- echo \"💡 响应内容: \${RAW_TOKEN:-'请求超时或无返回'}\"; \
80
  fi; \
81
  \
82
  # 维持主进程
 
8
  ./openlist server & \
9
  PID=\$!; \
10
  \
11
+ # 2. 等待服务就绪
12
  echo '⏳ 正在等待 OpenList 服务启动...'; \
13
+ sleep 8; \
 
14
  \
15
  MAX_RETRIES=10; \
16
  while ! wget -q --spider http://127.0.0.1:5244/api/public/settings; do \
17
  sleep 2; \
18
  MAX_RETRIES=\$((MAX_RETRIES - 1)); \
19
  if [ \$MAX_RETRIES -le 0 ]; then \
20
+ echo '❌ 错误: 服务启动超时。'; exit 1; \
 
 
21
  fi; \
22
  done; \
23
+ \
24
  echo '✅ 服务已就绪!'; \
 
25
  \
26
+ # 3. 校验管理员密码
27
  if [ -z \"\$OPENLIST_ADMIN_PASSWORD\" ]; then \
28
+ echo '❌ 错误: 未配置 OPENLIST_ADMIN_PASSWORD。'; \
29
  wait \$PID; exit 1; \
30
  fi; \
31
  \
32
+ # 4. 获取 Token
33
  echo '🔑 正在获取 Token...'; \
34
  RAW_TOKEN=\$(wget -qO- --timeout=5 --post-data=\"{\\\"username\\\":\\\"admin\\\",\\\"password\\\":\\\"\$OPENLIST_ADMIN_PASSWORD\\\"}\" \
35
  --header='Content-Type: application/json' \
 
37
  \
38
  TOKEN=\$(echo \$RAW_TOKEN | grep -o '\"token\":\"[^\"]*\"' | cut -d'\"' -f4); \
39
  \
40
+ # 5. 注入逻辑 (支持原始换行格式)
41
  if [ -n \"\$TOKEN\" ] && [ \"\${#TOKEN}\" -gt 20 ]; then \
42
+ echo '🚀 登录成功,正在处理存储配置...'; \
 
43
  FOUND_VALID=0; \
44
+ \
45
  for i in 1 2 3 4 5 6 7 8 9 10; do \
46
+ # --- 关键:使用 printenv 获取原始 JSON ---
47
+ JSON_BODY=\$(printenv STORAGE_JSON_\$i); \
48
  \
49
+ if [ -z \"\$JSON_BODY\" ]; then \
50
  continue; \
51
  fi; \
52
  \
53
  FOUND_VALID=1; \
54
+ # 将原始 JSON 写入临时文件,确保换行和转义原样保留
55
+ echo \"\$JSON_BODY\" > /tmp/payload.json; \
56
+ \
57
+ if ! grep -q '\"mount_path\"' /tmp/payload.json; then \
58
+ echo \"⚠️ STORAGE_JSON_\$i 格式不完整,已跳过。\"; \
59
+ rm /tmp/payload.json; continue; \
60
  fi; \
61
  \
62
+ echo \"📦 正在推送第 \$i 个配置到 API...\"; \
63
+ # 使用 --post-file 直接发送文件内容,完美避开 Shell 转义地狱
64
+ RES=\$(wget -qO- --timeout=10 --post-file=/tmp/payload.json \
65
+ --header=\"Content-Type: application/json\" \
66
+ --header=\"Authorization: \$TOKEN\" \
67
+ http://127.0.0.1:5244/api/admin/storage/create); \
68
+ \
69
+ echo \"响应内容: \$RES\"; \
70
+ rm /tmp/payload.json; \
71
  echo ''; \
72
  done; \
73
  \
74
+ [ \"\$FOUND_VALID\" -eq 0 ] && echo 'ℹ️ 提示: 未发现有效的存储配置。'; \
75
+ echo ' 注入流程处理完毕!'; \
 
 
 
76
  else \
77
+ echo '❌ 登录失败!内容: ' \${RAW_TOKEN:-'无响应'}; \
 
78
  fi; \
79
  \
80
  # 维持主进程