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
相关产品推荐
相关产品推荐

