如何在M1(ARM)架构设备的Docker环境中运行ElasticSearch v6
M1(ARM架构)设备Docker环境运行ElasticSearch v6 实操方案
ElasticSearch v6 确实未提供官方ARM架构适配版本,以下是三种可落地的运行方案,均适配搭载M系列ARM芯片的Mac设备:
方案1:x86镜像转译运行(零额外配置,推荐本地开发使用)
借助Docker的跨架构转译能力直接运行官方x86版本的ES6镜像,配合Mac的Rosetta 2转译层性能损耗在可接受范围内,适合快速搭建调试环境:
- 先确保Docker Desktop for Mac已经在设置中开启Rosetta 2转译功能
- 拉取官方ES6镜像时指定x86平台,优先选择v6的最终维护版本6.8.23,稳定性更好:
docker pull --platform linux/amd64 elasticsearch:6.8.23 - 执行命令启动单节点实例:
docker run -d --name es6 \ --platform linux/amd64 \ -p 9200:9200 -p 9300:9300 \ -e "discovery.type=single-node" \ -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \ elasticsearch:6.8.23
注意:该方案启动速度比原生镜像慢10-30秒,内存占用比原生高30%左右,仅适合本地开发使用,禁止用于生产环境。
方案2:使用社区原生ARM64构建镜像(无转译损耗,性能最好)
开源社区有开发者维护了适配ARM64架构的ES6构建镜像,不需要转译即可直接运行,性能和原生x86环境无明显差异:
- 直接在公共镜像仓库检索对应6.x小版本的ARM64适配镜像即可,注意选择和你业务要求版本号完全一致的镜像,优先选择下载量高、更新记录透明的镜像
- 启动时不需要额外指定platform参数,其余环境变量、端口映射配置和官方镜像完全一致,参考启动命令:
docker run -d --name es6-arm \ -p 9200:9200 -p 9300:9300 \ -e "discovery.type=single-node" \ -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \ [对应社区ARM64镜像名]:6.8.23
注意:社区镜像非Elastic官方维护,敏感业务场景使用前需要自行核查镜像安全性。
方案3:自行编译原生ARM64镜像(安全性最高,适合定制场景)
如果对镜像来源安全性要求高,可以自行编译ARM64版本的ES6镜像:
- 拉取对应6.x版本的ElasticSearch源码,切换到目标版本的tag
- ES6依赖的JDK 8已有成熟的ARM64适配版本,替换构建配置中的JDK下载源为ARM64版本的OpenJDK 8
- 调整JNI本地依赖的编译参数适配ARM64指令集,完成源码编译
- 参考官方ES6的Dockerfile,基于ARM64基础镜像打包生成可用镜像即可
常见问题排查
- 启动后访问
http://localhost:9200无响应:转译场景下第一次启动耗时较长,可通过docker logs -f es6查看启动日志,等日志输出started标识后再尝试访问 - 启动报
max virtual memory areas vm.max_map_count [65530] is too low错误:在宿主机执行sudo sysctl -w vm.max_map_count=262144临时调整系统参数即可,重启设备后需要重新执行 - 启动后立刻退出报内存不足:调小ES_JAVA_OPTS中的堆内存参数,建议设置值不超过宿主机可用内存的50%
重要提示:ElasticSearch v6 已结束官方维护周期,存在已知未修复安全漏洞,无论使用哪种方案都不建议部署到公网生产环境。
内容的提问来源于stack exchange,提问作者Raz Luvaton
相关产品推荐
相关产品推荐

