M1芯片Docker运行Elasticsearch 6.5.4找不到Java运行环境求解决方案
问题原因
Elasticsearch 6.5.4官方仅提供x86_64(amd64)架构的镜像,Apple M1芯片为arm64架构,直接运行x86镜像时无法找到对应架构的Java运行环境,因此触发报错。
可行解决方法
- 方法1:升级Docker Desktop并开启Rosetta 2转译(优先推荐,性能损耗最低)
- 升级Docker Desktop到4.16及以上版本
- 打开Docker设置,在「特性预览」选项中勾选「Use Rosetta for x86/amd64 emulation on Apple Silicon」
- 重启Docker后,直接使用原有docker-compose.yml配置启动即可,无需修改其他内容
- 方法2:强制指定镜像运行架构(无需升级Docker,适配你当前3.6.0版本)
在你的docker-compose.yml的elasticsearch配置段中新增platform: linux/amd64参数,修改后的配置如下:
elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:6.5.4 container_name: es01 platform: linux/amd64 # 新增这一行 environment: - node.name=es01 - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 volumes: - esdata01:/usr/share/elasticsearch/data ports: - 9200:9200
这个方案通过Docker内置的QEMU对x86指令进行转译运行,无需升级Docker版本即可直接使用,仅性能损耗比Rosetta方案略高,本地开发场景完全够用。
注意
- 上述两种转译方案的性能比原生arm64镜像低10%-30%,仅推荐本地开发使用,如果是生产环境建议升级Elasticsearch到7.10及以上版本,官方从该版本开始提供原生arm64架构镜像。
- 原有挂载的es数据卷可以正常复用,不会出现数据丢失问题。
内容的提问来源于stack exchange,提问作者Anand Thati
相关产品推荐
相关产品推荐

