You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose部署Elasticsearch 8.5.0失败,退出码137求助

Elasticsearch 8.5.0容器启动失败(退出码137)排查与解决

问题描述

使用Docker Compose v2.12.2启动Elasticsearch 8.5.0容器时失败,执行docker-compose up后容器输出如下:

Attaching to es
es  | Created elasticsearch keystore in /usr/share/elasticsearch/config/elasticsearch.keystore
es  | 
es  | ERROR: Elasticsearch exited unexpectedly
es exited with code 137

对应的Docker Compose配置文件如下:

version: '3.1'
services:

  elasticsearch:
    image: elasticsearch:8.5.0
    container_name: "es"
    ports:
      - 9200:9200
    environment:
      discovery.type: 'single-node'
      xpack.security.enabled: 'true'
      ELASTIC_PASSWORD: 'secret'
    volumes:
      - data:/usr/share/elasticsearch/data

volumes:
  data:
    driver: local

解决思路与方案

容器退出码137的核心原因是进程因内存不足被系统强制终止,Elasticsearch默认对内存需求较高,可通过以下方式解决:

1. 配置Elasticsearch JVM内存

在Compose配置的environment中添加JVM内存参数,根据宿主机资源调整初始堆和最大堆大小,示例设置为1GB:

environment:
  discovery.type: 'single-node'
  xpack.security.enabled: 'true'
  ELASTIC_PASSWORD: 'secret'
  ES_JAVA_OPTS: "-Xms1g -Xmx1g"  # 新增JVM内存配置

建议:Xms和Xmx保持相同值,避免内存频繁波动,且总大小不要超过宿主机内存的50%。

2. 限制容器内存上限

如果宿主机资源有限,可直接给Elasticsearch容器设置内存配额:

  • Compose v3+版本使用deploy配置:
services:
  elasticsearch:
    # 保留原有配置
    deploy:
      resources:
        limits:
          memory: 2g
        reservations:
          memory: 1g
  • 兼容旧版本可使用mem_limit:
services:
  elasticsearch:
    # 保留原有配置
    mem_limit: 2g

3. 检查宿主机内存状态

执行free -h查看宿主机剩余内存,若可用内存不足,需关闭其他高内存进程或升级宿主机内存。

4. 清理旧数据卷(可选)

若之前启动过容器导致数据卷存在损坏文件,可删除数据卷后重新启动(此操作会清空所有数据):

docker-compose down -v
docker-compose up

内容的提问来源于stack exchange,提问作者DrunkenPotato

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 02:05:16