LogLInk1K commited on
Commit
598da2e
·
verified ·
1 Parent(s): 2c16d8c

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +68 -46
Dockerfile CHANGED
@@ -3,59 +3,81 @@ WORKDIR /opt/openlist
3
  USER root
4
  EXPOSE 5244
5
 
6
- # 1. 彻底清空可能存在的入口干扰
7
- ENTRYPOINT []
8
-
9
- # 2. 确保权限
10
- RUN chmod +x ./openlist
11
-
12
- # 3. 放弃数组格式,直接用最原始的 Shell 脚本字符串
13
- # 这里的反斜杠确保换行在 Docker 解析时连成一条命令
14
- CMD ./openlist server & \
15
- PID=$!; \
16
- echo "======= 🚀 启动强制输出模式 ======="; \
17
- sleep 10; \
18
  \
19
- # 存活探测
20
- MAX_RETRIES=15; \
 
 
 
 
21
  while ! wget -q --spider http://127.0.0.1:5244/api/public/settings; do \
22
- echo "⏳ 端口探测中... (剩余重试: $MAX_RETRIES)"; \
23
- sleep 3; \
24
- MAX_RETRIES=$((MAX_RETRIES - 1)); \
25
- if [ $MAX_RETRIES -le 0 ]; then \
26
- echo "启动失败:服务超时。"; \
27
- ps aux; exit 1; \
28
  fi; \
29
  done; \
 
 
 
30
  \
31
- echo "✅ 服务已就绪,正在准备注入配置..."; \
 
 
 
 
32
  \
33
- # 配置注入
34
- if [ -n "$OPENLIST_ADMIN_PASSWORD" ]; then \
35
- RAW_TOKEN=$(wget -qO- --timeout=10 --post-data="{\"username\":\"admin\",\"password\":\"$OPENLIST_ADMIN_PASSWORD\"}" \
36
- --header='Content-Type: application/json' \
37
- http://127.0.0.1:5244/api/auth/login); \
38
- \
39
- TOKEN=$(echo $RAW_TOKEN | grep -o '"token":"[^"]*"' | cut -d'"' -f4); \
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  \
41
- if [ -n "$TOKEN" ]; then \
42
- echo "🚀 登录成功,处理 STORAGE_JSON..."; \
43
- for i in 1 2 3 4 5 6 7 8 9 10; do \
44
- eval JSON=\$STORAGE_JSON_$i; \
45
- if [ -n "$JSON" ]; then \
46
- echo "📦 注入配置 $i..."; \
47
- wget -qO- --post-data="$JSON" \
48
- --header='Content-Type: application/json' \
49
- --header="Authorization: $TOKEN" \
50
- http://127.0.0.1:5244/api/admin/storage/create; \
51
- echo ""; \
52
- fi; \
53
- done; \
54
- echo "✅ 注入完成!"; \
55
- else \
56
- echo "❌ 登录失败,响应: $RAW_TOKEN"; \
57
  fi; \
 
 
 
 
58
  fi; \
59
  \
60
- echo "======= 📝 流程结束,主进程守护中 ======="; \
61
- wait $PID
 
3
  USER root
4
  EXPOSE 5244
5
 
6
+ CMD sh -c "\
7
+ # 1. 启动服务
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' \
40
+ http://127.0.0.1:5244/api/auth/login); \
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
+ # 维持主进程
83
+ wait \$PID"