如何在苹果芯片的Mac上运行Elasticsearch 6?

14

为了开发一个应用程序,我需要在苹果芯片的Mac上运行Elasticsearch 6。

我尝试使用Docker来运行它。阅读Apple silicon的Docker桌面,我已经安装了Rosetta2:

softwareupdate --install-rosetta

并添加了--platform linux/amd64命令行选项。

运行:

docker run -d --platform linux/amd64 --name elasticsearch  -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:6.8.18

我收到有关AVX指令集的警告:

OpenJDK 64-Bit Server VM warning: UseAVX=2 is not supported on this CPU, setting it to UseAVX=0

我添加了命令行选项:-e "ES_JAVA_OPTS=-XX:UseAVX=0",但是我仍然得到:


[2021-08-22T00:06:20,727][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [unknown] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: org.elasticsearch.bootstrap.BootstrapException: java.io.IOException: Cannot run program "/usr/share/elasticsearch/modules/x-pack-ml/platform/linux-x86_64/bin/controller": error=0, Failed to exec spawn helper: pid: 131, exit value: 1
    at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:163) ~[elasticsearch-6.8.18.jar:6.8.18]
    at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:150) ~[elasticsearch-6.8.18.jar:6.8.18]
    at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[elasticsearch-6.8.18.jar:6.8.18]
    at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) ~[elasticsearch-cli-6.8.18.jar:6.8.18]
    at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-cli-6.8.18.jar:6.8.18]
    at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:116) ~[elasticsearch-6.8.18.jar:6.8.18]
    at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:93) ~[elasticsearch-6.8.18.jar:6.8.18]
Caused by: org.elasticsearch.bootstrap.BootstrapException: java.io.IOException: Cannot run program "/usr/share/elasticsearch/modules/x-pack-ml/platform/linux-x86_64/bin/controller": error=0, Failed to exec spawn helper: pid: 131, exit value: 1
    at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:167) ~[elasticsearch-6.8.18.jar:6.8.18]
    at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:333) ~[elasticsearch-6.8.18.jar:6.8.18]
    at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:159) ~[elasticsearch-6.8.18.jar:6.8.18]
    ... 6 more
Caused by: java.io.IOException: Cannot run program "/usr/share/elasticsearch/modules/x-pack-ml/platform/linux-x86_64/bin/controller": error=0, Failed to exec spawn helper: pid: 131, exit value: 1
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1142) ~[?:?]
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1073) ~[?:?]
    at org.elasticsearch.bootstrap.Spawner.spawnNativeController(Spawner.java:118) ~[elasticsearch-6.8.18.jar:6.8.18]
    at org.elasticsearch.bootstrap.Spawner.spawnNativeControllers(Spawner.java:86) ~[elasticsearch-6.8.18.jar:6.8.18]
    at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:165) ~[elasticsearch-6.8.18.jar:6.8.18]
    at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:333) ~[elasticsearch-6.8.18.jar:6.8.18]
    at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:159) ~[elasticsearch-6.8.18.jar:6.8.18]
    ... 6 more
Caused by: java.io.IOException: error=0, Failed to exec spawn helper: pid: 131, exit value: 1
    at java.lang.ProcessImpl.forkAndExec(Native Method) ~[?:?]
    at java.lang.ProcessImpl.<init>(ProcessImpl.java:313) ~[?:?]
    at java.lang.ProcessImpl.start(ProcessImpl.java:244) ~[?:?]
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1109) ~[?:?]
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1073) ~[?:?]
    at org.elasticsearch.bootstrap.Spawner.spawnNativeController(Spawner.java:118) ~[elasticsearch-6.8.18.jar:6.8.18]
    at org.elasticsearch.bootstrap.Spawner.spawnNativeControllers(Spawner.java:86) ~[elasticsearch-6.8.18.jar:6.8.18]
    at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:165) ~[elasticsearch-6.8.18.jar:6.8.18]
    at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:333) ~[elasticsearch-6.8.18.jar:6.8.18]
    at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:159) ~[elasticsearch-6.8.18.jar:6.8.18]
    ... 6 more

我查看了Elasticsearch中的机器学习设置,文档中指出:

机器学习使用SSE4.2指令,因此只能在支持SSE4.2的计算机上工作。如果您在旧硬件上运行Elasticsearch,则必须禁用机器学习(通过将xpack.ml.enabled设置为false)。

因此,我添加了命令行选项:-e "xpack.ml.enabled=false",现在Elasticsearch已经启动,但日志中没有任何内容,并且它不响应请求。

我的问题是:如何在Apple Silicon Mac上运行Elasticsearch 6?


注意,对于版本7,虽然目前尚未在安装文档中链接,但您可以在URL中将x86_64更改为aarch64并下载ARM版本,例如https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.2.0-darwin-aarch64.tar.gz - andrewdotn
5个回答

8

我刚遇到了这个问题,但是通过这里的curl指令,我发现你可以运行elasticsearch,不过我想使用docker。

如果你想使用我的镜像,请随意使用:

docker run -p 9200:9200 -p 9300:9300 tompreston377/elasticsearch

为了制作这张图片,我将文件组织如下:
.
├── Dockerfile-elastic
└── elasticsearch.yml

Dockerfile:
# Dockerfile-elastic.yml
FROM arm64v8/openjdk:8-jdk-buster

WORKDIR /usr

# add a non root user
RUN useradd -m elasticuser

# Download extras
RUN apt update
RUN apt install -y curl nano

# Download elasticsearch
RUN curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.8.23.tar.gz
RUN tar -xvf elasticsearch-6.8.23.tar.gz

# Add config
ADD elasticsearch.yml /usr/elasticsearch-6.8.23/config/elasticsearch.yml

RUN chown -R elasticuser: .
USER elasticuser

ENV JAVA_HOME=/usr/local/openjdk-18/bin/java
ENV discovery.type=single-node
ENV xpack.security.enabled: false
ENV xpack.ml.enabled: false

RUN cd elasticsearch-6.8.23/bin
RUN chown -R elasticuser: elasticsearch-6.8.23

EXPOSE 9200 9300
CMD cd /usr/elasticsearch-6.8.23/bin/ && ./elasticsearch

elasticsearch.yml:

# elasticsearch.yml
xpack.security.enabled: false
xpack.ml.enabled: false

http.host: 0.0.0.0
transport.host: 0.0.0.0

命令:

构建: docker build -f Dockerfile-elastic -t elastic .

运行: docker run -p 9200:9200 -p 9300:9300 elastic


6

2
webhippie/elasticsearch 对我很有用。谢谢!这个镜像的最新版本是v6.4.0。 - Armin
@Armin,你需要做什么特殊的事情才能让webhippie工作?我在我的M1笔记本上运行elasticsearch 6时遇到了问题。即使删除docker卷并重新构建后启动,仍然会出现相同的I/O异常错误。 - robert.bo.roth

2

我长时间以来一直在解决这个问题,以下是我的发现:

  • 普通版本6或7不可用。
  • 对于版本7,您需要使用docker.elastic.co/webhippie/elasticsearch:7.10.2-arm64
  • 对于版本6,使用webhippie/elasticsearch:6.4

希望这些信息对某些人有用。


1

发现了这个github问题 #81383

添加-e "ES_JAVA_OPTS=-Xms512m -Xmx512m"可以解决与7.16.1版本的崩溃问题。

希望对您有所帮助。


1

我自己也遇到了这个问题,很长一段时间都无法解决。对于版本6的解决方案webhippie/elasticsearch:6.4也适用。

我能够启动容器elasticsearch:6.8.6 然后我做了以下操作

  1. - xpack.security.enabled=false- bootstrap.system_call_filter=false添加到es环境中;
  2. 从es中删除volumes
  3. esdata添加到公共volumes

像这样

 es:
    image: elasticsearch:6.8.6
    environment:
        - xpack.security.enabled=false
        - discovery.type=single-node
        - bootstrap.system_call_filter=false
    ports:
        - "9200:9200"
        - "9300:9300"

volumes:
    esdata:
    <--anything else-->

也许这个解决方案可以帮助某些人


这对我没用。 :-( - Albert T. Wong
我使用 docker-compose.yaml 文件。请展示你的文件。 还有控制台上的错误是什么? - Pavel Chirukhin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接