rustfs-init Container Fails to Start — bucket.config.json Field Casing Error / rustfs-init 容器启动失败 — bucket.config.json 字段大小写错误

使用官方 setup.sh 部署 LobeChat Docker Compose 后, rustfs-init 容器因 bucket.config.json 中 "ID" 字段大小写错误(应为 "Id" )导致 mc anonymous set-json 解析失败而退出(exit 1)。优先检查并修

快速结论:使用官方 setup.sh 部署 LobeChat Docker Compose 后,rustfs-init 容器因 bucket.config.json"ID" 字段大小写错误(应为 "Id")导致 mc anonymous set-json 解析失败而退出(exit 1)。优先检查并修正 bucket.config.json 中的字段名。

适用环境:Docker Compose 自托管部署 (Self hosting Docker),客户端类型 Web (Desktop Browser),操作系统 Windows/Ubuntu 24.04,版本 LobeChat 2.2.9,浏览器 Edge,依赖 Docker Compose V2。

最快修复方案:bucket.config.json 中的 "ID" 改为 "Id",然后重新启动 rustfs-init 容器或重新应用策略。

注意事项:该修复已在 PR #15603 中合并至仓库,更新后的 setup.sh 不会再出现此问题。已部署的用户需手动修改配置并重启容器;修改后无需重建整个服务。

问题场景

用户通过 curl -fsSL https://lobe.li/setup.sh | bash 脚本在 Ubuntu 24.04 上使用 Docker Compose V2 部署 LobeChat(版本 2.2.9),启动服务后 rustfs-init 容器立即退出(exit code 1),导致无法为 bucket 设置匿名下载策略。

报错原文

mc: <ERROR> Unable to set-json anonymous '/bucket.config.json' for 'rustfs/lobe'.
parse policy failed Error("unknown field 'ID', expected one of 'Id', 'Version', 'Statement'", line: 2, column: 6).

原因分析

根因是 docker-compose/deploy/bucket.config.json 中使用了全大写 "ID" 字段,但 RustFS(MinIO 兼容)遵循 AWS Policy Grammar,顶层标识符必须为 "Id"(首字母大写,d 小写)。mc anonymous set-json 解析 JSON 时遇到未知字段 "ID" 而失败,导致容器退出。

环境排查

  • 确认部署方式:使用官方 setup.sh 脚本(域名模式)
  • 确认服务器系统版本(如 Ubuntu 24.04)和 Docker Compose 版本(V2)
  • 检查 docker compose psrustfs-init 容器状态是否为 Exited (1)
  • 查看容器日志:docker compose logs rustfs-init,确认是否包含上述 parse policy 错误
  • 检查 bucket.config.json 文件中的字段名是否为 "ID"(全大写)

解决步骤

  1. 找到部署目录下的 bucket.config.json 文件,通常位于 /opt/lobehub/bucket.config.json 或与 docker-compose.yml 同目录的 deploy 子目录中。
  2. 编辑该文件,将 "ID" 改为 "Id"(保留其他字段不变)。示例:
    {
      "Id": "",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {"AWS": ["*"]},
          "Action": ["s3:GetObject"],
          "Resource": ["arn:aws:s3:::lobe/*"]
        }
      ],
      "Version": "2012-10-17"
    }
  3. 重新创建 rustfs-init 容器以应用策略:
    docker compose up -d rustfs-init (或 docker compose restart rustfs-init
  4. 等待容器运行完成并自动退出(状态应为 0)。

验证方法

运行 docker compose ps 确认 rustfs-init 容器状态为 Exited (0),且日志中不再出现 parse policy 错误。
也可以手动检查 bucket 策略是否已应用:docker compose exec minio mc anonymous get rustfs/lobe 应输出正确的策略 JSON。

参考来源

lobehub/lobehub #17002

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 16116

发表回复

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