
File upload fails on local Docker + RustFS (CORS error)
快速结论:在本地 Docker 自部署 LobeHub 并搭配 RustFS 作为 S3 存储时,文件上传失败并报 CORS 错误。优先排查 S3_PUBLIC_DOMAIN 环境变量是否缺失,以及 RustFS 控制台中是否启用了 Bucket CORS。
问题场景
用户在 Windows 11 + WSL2 + Docker 环境下,使用 setup.sh + Docker Compose 部署 LobeHub(lobehub/lobehub:latest),堆栈包含 lobe-postgres、lobe-redis、lobe-rustfs、lobe-searxng。用户已手动修复 rustfs-init 的 ID → Id 策略配置 bug,rustfs-init 退出码为 0。通过浏览器访问 http://localhost:3210 上传文件时,UI 提示上传失败,并报类似 CORS 配置错误的法语消息:“Échec du téléversement du fichier. Veuillez vérifier votre connexion réseau et la configuration CORS du service de stockage.”。
报错原文
Échec du téléversement du fichier.
Veuillez vérifier votre connexion réseau et la configuration CORS du service de stockage.
(核心含意:文件上传失败,请检查网络连接和存储服务的 CORS 配置。)
原因分析
该报错的最可能原因是 S3_PUBLIC_DOMAIN 环境变量缺失,以及 RustFS 中未开启 Bucket CORS。
S3_ENDPOINT用于服务端 S3 API 调用,但浏览器端需要访问文件时,LobeHub 依赖S3_PUBLIC_DOMAIN生成公网可访问的 URL。如果未配置,浏览器会试图通过内部的S3_ENDPOINT(例如http://localhost:9000)访问文件,而该地址未设置 CORS 响应头,导致浏览器拦截。- RustFS 管理控制台(
http://localhost:9001)中,Bucket 的 CORS 策略默认处于关闭状态,需手动启用。
环境排查
- Docker Compose 堆栈是否均已
Up (healthy)。 .env文件中是否存在S3_PUBLIC_DOMAIN变量。S3_ENDPOINT是否只包含协议、主机和端口(例如http://localhost:9000),无额外路径或桶名。- RustFS 管理控制台(
http://localhost:9001)中,对应的 bucket(例如lobe)的 CORS 设置是否已启用。 S3_SET_ACL是否已设为1以允许公开读取。
解决步骤
- 添加
S3_PUBLIC_DOMAIN环境变量:在.env文件中添加一行:S3_PUBLIC_DOMAIN=http://localhost:9000 - 添加
S3_SET_ACL=1:在.env文件中添加:S3_SET_ACL=1对于自托管 S3 兼容存储,该参数使上传的文件具有公开读取权限。
- 在 RustFS 管理控制台中启用 Bucket CORS:
- 访问
http://localhost:9001,使用admin/passw登录。 - 进入 Browser → 选择
lobebucket → 点击 Settings。 - 找到 “Bucket CORS” 选项并启用,使用默认允许所有来源(
*)的配置。
- 访问
- 验证
.env中 S3 完整配置(示例):S3_ENDPOINT=http://localhost:9000 S3_PUBLIC_DOMAIN=http://localhost:9000 S3_BUCKET=lobe S3_REGION=us-east-1 S3_ACCESS_KEY=admin S3_SECRET_KEY=0df6852e S3_ENABLE_PATH_STYLE=1 S3_SET_ACL=1 - 重启堆栈:运行以下命令让配置生效:
docker compose down && docker compose up -d
验证方法
重启堆栈后,通过浏览器访问 http://localhost:3210 并尝试上传文件。如果不再出现 CORS 错误消息,说明问题已解决。也可在浏览器开发者工具(F12)的 Network 或 Console 面板中检查是否有 CORS 相关警告消失。
参考来源
lobehub/lobe-chat #15584(含讨论和同类 Issue 链接:#14665、#4230、#8636、#14655)



