Download Dockerfile from ohmyapi/openlist: direct link, hf CLI and curl.
- Browser
- Download file 2.97 kB
-
https://huggingface.co/spaces/ohmyapi/openlist/resolve/main/Dockerfile
- Command line
-
hf download hf://spaces/ohmyapi/openlist/Dockerfile
-
curl -L -o Dockerfile https://huggingface.co/spaces/ohmyapi/openlist/resolve/main/Dockerfile
2.97 kB
| FROM openlistteam/openlist:latest | |
| WORKDIR /opt/openlist | |
| USER root | |
| EXPOSE 5244 | |
| CMD sh -c "\ | |
| # 1. 启动服务 | |
| ./openlist server & \ | |
| PID=\$!; \ | |
| \ | |
| # 2. 等待服务就绪 | |
| echo '⏳ 正在等待 OpenList 服务启动...'; \ | |
| sleep 8; \ | |
| \ | |
| MAX_RETRIES=10; \ | |
| while ! wget -q --spider http://127.0.0.1:5244/api/public/settings; do \ | |
| sleep 2; \ | |
| MAX_RETRIES=\$((MAX_RETRIES - 1)); \ | |
| if [ \$MAX_RETRIES -le 0 ]; then \ | |
| echo '❌ 错误: 服务启动超时。'; exit 1; \ | |
| fi; \ | |
| done; \ | |
| \ | |
| echo '✅ 服务已就绪!'; \ | |
| \ | |
| # 3. 校验管理员密码 | |
| if [ -z \"\$OPENLIST_ADMIN_PASSWORD\" ]; then \ | |
| echo '❌ 错误: 未配置 OPENLIST_ADMIN_PASSWORD。'; \ | |
| wait \$PID; exit 1; \ | |
| fi; \ | |
| \ | |
| # 4. 获取 Token | |
| echo '🔑 正在获取 Token...'; \ | |
| RAW_TOKEN=\$(wget -qO- --timeout=5 --post-data=\"{\\\"username\\\":\\\"admin\\\",\\\"password\\\":\\\"\$OPENLIST_ADMIN_PASSWORD\\\"}\" \ | |
| --header='Content-Type: application/json' \ | |
| http://127.0.0.1:5244/api/auth/login); \ | |
| \ | |
| TOKEN=\$(echo \$RAW_TOKEN | grep -o '\"token\":\"[^\"]*\"' | cut -d'\"' -f4); \ | |
| \ | |
| # 5. 注入逻辑 (支持原始换行格式) | |
| if [ -n \"\$TOKEN\" ] && [ \"\${#TOKEN}\" -gt 20 ]; then \ | |
| echo '🚀 登录成功,正在处理存储配置...'; \ | |
| FOUND_VALID=0; \ | |
| \ | |
| for i in 1 2 3 4 5 6 7 8 9 10; do \ | |
| # --- 关键:使用 printenv 获取原始 JSON --- | |
| JSON_BODY=\$(printenv STORAGE_JSON_\$i); \ | |
| \ | |
| if [ -z \"\$JSON_BODY\" ]; then \ | |
| continue; \ | |
| fi; \ | |
| \ | |
| FOUND_VALID=1; \ | |
| # 将原始 JSON 写入临时文件,确保换行和转义原样保留 | |
| echo \"\$JSON_BODY\" > /tmp/payload.json; \ | |
| \ | |
| if ! grep -q '\"mount_path\"' /tmp/payload.json; then \ | |
| echo \"⚠️ STORAGE_JSON_\$i 格式不完整,已跳过。\"; \ | |
| rm /tmp/payload.json; continue; \ | |
| fi; \ | |
| \ | |
| echo \"📦 正在推送第 \$i 个配置到 API...\"; \ | |
| # 使用 --post-file 直接发送文件内容,避开 Shell 转义 | |
| RES=\$(wget -qO- --timeout=10 --post-file=/tmp/payload.json \ | |
| --header=\"Content-Type: application/json\" \ | |
| --header=\"Authorization: \$TOKEN\" \ | |
| http://127.0.0.1:5244/api/admin/storage/create); \ | |
| \ | |
| echo \"响应内容: \$RES\"; \ | |
| rm /tmp/payload.json; \ | |
| echo ''; \ | |
| done; \ | |
| \ | |
| [ \"\$FOUND_VALID\" -eq 0 ] && echo 'ℹ️ 提示: 未发现有效的存储配置。'; \ | |
| echo '✅ 注入流程处理完毕!'; \ | |
| else \ | |
| echo '❌ 登录失败!内容: ' \${RAW_TOKEN:-'无响应'}; \ | |
| fi; \ | |
| \ | |
| # 维持主进程 | |
| wait \$PID" |