Docker Compose部署Elasticsearch出现runtime线程创建错误如何解决
问题原因
你遇到的第二个报错是AMD64镜像通过QEMU转译运行在ARM架构设备上的兼容性问题:
Elasticsearch 5.6.4内置依赖的旧版本Go runtime不支持QEMU用户态转译的运行环境,强制指定platform: linux/amd64只能解决镜像拉取的manifest匹配问题,解决不了运行时的内核调用兼容性问题。
解决方案
方案1:更换支持ARM架构的Elasticsearch镜像版本(推荐)
Elasticsearch从7.10版本开始官方提供ARM64架构的镜像,直接更换镜像版本即可,不需要强制指定platform:
es: image: elasticsearch:7.17.10 # 选7.x的稳定ARM兼容版本即可 restart: "always" environment: - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" - discovery.type=single-node # 单节点运行必须添加该配置 ulimits: memlock: soft: -1 hard: -1 mem_limit: 1g ports: - "9200:9200" - "9300:9300"
如果业务必须依赖5.6.4版本,可使用方案2。
方案2:使用社区适配ARM64的Elasticsearch 5.6.4镜像
有第三方开发者编译了适配ARM64的5.6.4版本镜像,直接替换镜像名称即可,不需要加platform配置:
image: indiehosters/elasticsearch:5.6.4-arm64
方案3:开启Rosetta转译(仅适用于Apple Silicon芯片的Mac设备)
如果你使用的是M系列芯片的Mac,可以在Docker Desktop设置中开启Use Rosetta for x86/amd64 emulation on Apple Silicon选项,开启后大部分旧版本AMD64镜像都可以正常转译运行,不需要修改镜像配置。
内容的提问来源于stack exchange,提问作者ParthS007
相关产品推荐
相关产品推荐

