[Question]: Cann’t start ragflow-es-01

用户在 Ubuntu 系统上通过 docker compose -f docker-compose.yml up -d 启动 RAGFlow,Elasticsearch 容器启动后立即退出, docker ps 显示容器状态为 Restarting ,日志中反复出现 ERROR: Elasticse

[Question]: Cann't start ragflow-es-01

[Question]: Cann’t start ragflow-es-01

快速结论:该报错通常出现在通过 Docker Compose 启动 RAGFlow 时,Elasticsearch 容器(ragflow-es-01)因内存不足被系统终止(exit code 137)。优先排查系统内存是否充足,或 Docker 容器内存限制是否过小。

问题场景

用户在 Ubuntu 系统上通过 docker compose -f docker-compose.yml up -d 启动 RAGFlow,Elasticsearch 容器启动后立即退出,docker ps 显示容器状态为 Restarting,日志中反复出现 ERROR: Elasticsearch exited unexpectedly, with exit code 137。其他容器(redis、minio、mysql)均正常运行。

报错原文

ERROR: Elasticsearch exited unexpectedly, with exit code 137
ERROR: Elasticsearch exited unexpectedly, with exit code 137
ERROR: Elasticsearch exited unexpectedly, with exit code 137
ERROR: Elasticsearch exited unexpectedly, with exit code 137
ERROR: Elasticsearch exited unexpectedly, with exit code 137

原因分析

退出码 137 表示 Docker 容器被系统 OOM Killer 强制终止,通常是因为 Elasticsearch 进程占用的内存超过了系统或 Docker 允许的限制。可能原因包括:

  • 系统内存不足(至少需要 16GB,但实际可用内存可能更少)。
  • Docker 容器的内存限制(mem_limit)设置过低(例如在 docker-compose-base.yml 中配置)。
  • Elasticsearch 的 JVM 堆内存设置(ES_JAVA_OPTS)过大,超过可用内存。
  • 未正确设置 vm.max_map_count(尽管此设置通常会导致其他错误,而非 exit 137,但部分用户提及)。

环境排查

  • 系统内存总容量及可用内存:可通过 lsmemfree -h 查看。至少需 16GB,实际使用中 32GB 也可能遇到问题。
  • Docker 内存限制:检查 docker/docker-compose-base.yml 文件中 ragflow-es-01 服务下是否配置了 mem_limit
  • Elasticsearch JVM 堆内存:检查同一文件中 ES_JAVA_OPTS 环境变量(例如 -Xms1g -Xmx1g 是常见配置)。
  • vm.max_map_count 值:运行 sysctl vm.max_map_count,建议值为 262144。
  • .env 文件配置:确认 MYSQL 密码等参数是否已正确设置。

解决步骤

  1. 调整 Docker 内存限制(可优先尝试):在 docker/docker-compose-base.yml 中找到 ragflow-es-01 服务,移除或增大 mem_limit 配置项(部分用户直接移除后问题解决)。
  2. 降低 ES JVM 堆内存:设置 ES_JAVA_OPTS: "-Xms1g -Xmx1g"(即限制堆内存为 1GB),这可以减少总体内存占用。注意:内存巨大(32GB 以上)时此步骤可能非必需,但若上一步无效可尝试。
  3. 检查 vm.max_map_count:运行 sudo sysctl -w vm.max_map_count=262144(临时生效),或写入 /etc/sysctl.conf(永久生效)。
  4. 检查 .env 文件:确保 MYSQL 密码等关键参数已正确设定。用户 @xiaoquanWu 反馈设置 mysql 密码后问题解决。
  5. 验证系统内存:确保有足够可用内存(推荐至少 16GB 空闲),避免其他进程争用。

验证方法

重新执行 docker compose -f docker-compose.yml up -d,观察输出中 ragflow-es-01 是否显示 StartedHealthy。运行 docker ps 确认容器状态,并检查日志 docker logs ragflow-es-01 中不再出现 exit code 137 错误。

参考来源

infiniflow/ragflow #2884

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 7710

发表回复

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