Docker Compose 部署报错Io error: unknown field `ID`

该报错由部署脚本生成的 bucket.config.json 中键名大小写错误引起:JSON 中将 "ID" 写成了全大写,而 RustFS/MinIO 期望的是 "Id" 。优先排查并修正该 JSON 文件中的键名。

快速结论:该报错由部署脚本生成的 bucket.config.json 中键名大小写错误引起:JSON 中将 "ID" 写成了全大写,而 RustFS/MinIO 期望的是 "Id"。优先排查并修正该 JSON 文件中的键名。

适用环境:LobeChat 自托管 Docker Compose 部署,操作系统为 Linux,使用官方部署脚本 bash <(curl -fsSL https://lobe.li/setup.sh) -l zh_CN 安装。问题出现在 rustfs-init 初始化容器阶段。

最快修复方案:将部署目录中的 bucket.config.json 文件内的 "ID" 改为 "Id",然后重启 Docker Compose 服务。已确认此方案可解决该报错。

注意事项:该修复方案由社区反馈确认,Issue 中已被标记为已知问题,且此前已有类似 issue 被报告。若你的部署目录不是默认位置,需要根据实际情况替换路径。

问题场景

用户在 Linux 上通过官方部署脚本执行 LobeChat 自托管 Docker Compose 安装时,初始化容器 rustfs-init 执行失败,导致部署中断。报错信息指向 S3 存储桶创建失败,具体是因为 MinIO 客户端(mc)解析存储桶策略文件时遇到无法识别的字段。

报错原文

service "rustfs-init" didn't complete successfully: exit 1
mc: <ERROR> Unable to make bucket `rustfs/lobe`. Io error: unknown field `ID`, expected one of `Id`, `Version`, `Statement` at line 2 column 6

原因分析

可能原因:部署脚本生成的 bucket.config.json 文件中,第一行的键名被错误地写成全大写的 "ID",而 AWS/IAM 策略语法规范要求该字段必须为 "Id"(首字母大写,后跟小写字母 d)。MinIO 客户端在解析该策略文件时会严格校验字段名,因此引发了此错误。这属于部署脚本中的一个已知缺陷,在部分版本安装脚本中仍然存在。

环境排查

  • 确认部署目录位置:常见路径为 /opt/lobehub,可通过查找 docker-compose.ymlsetup.sh 文件确认。
  • 检查 bucket.config.json 文件内容,确认第一行是否为 "ID": ""

解决步骤

  1. 定位部署目录,例如:cd /opt/lobehub
  2. 执行如下命令修正 JSON 文件中的键名大小写:
    sed -i 's/"ID"/"Id"/' /path/to/lobehub/bucket.config.json

    (将 /path/to/lobehub 替换为实际目录)。

  3. 重新启动 Docker Compose 服务:
    cd /path/to/lobehub && docker compose up -d
  4. 等待 rustfs-init 容器执行完成,确认不再出现报错。

验证方法

执行 docker ps 查看容器状态,确认 rustfs-init 已进入 exited 状态且退出码为 0。同时可执行 docker logs rustfs-init,若日志末尾出现类似 Bucket created successfully 或不再出现 Io error 报错,则说明问题已解决。

参考来源

lobehub/lobe-chat #18139

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 19015

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注