You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Apple Mac OS M1机器上运行Elasticsearch 1.7.3容器并构建镜像?

在M1芯片机器上运行/构建Elasticsearch 1.7.3镜像的解决方案

首先明确:可以在M1机器上成功运行或构建适配的Elasticsearch 1.7.3镜像,针对你遇到的问题,分步骤解决:

问题拆解

你碰到的两个核心问题:

  • nc: not found:官方Elasticsearch 1.7.3的amd64镜像未预装netcat,导致Testcontainers的端口健康检查直接失败
  • exitCode=137 + Cannot assign requested address:M1是arm64架构,运行amd64镜像依赖QEMU模拟,容易出现资源不足、网络适配异常,甚至容器被系统强制终止

解决方案

方案1:修改Testcontainers健康检查逻辑(无需重构镜像)

既然镜像里没有nc,可以替换健康检查方式,直接检测Elasticsearch的HTTP接口:

ElasticsearchContainer container = new ElasticsearchContainer("elasticsearch:1.7.3")
    .waitingFor(Wait.forHttp("/")
        .forStatusCode(200)
        .withStartupTimeout(Duration.ofMinutes(2)));

同时给容器分配足够资源,避免QEMU模拟时的OOM问题:

container.withMemory(1024 * 1024 * 1024L); // 分配1GB内存
container.withCreateContainerCmdModifier(cmd -> cmd.withResources(
    new Resources()
        .withMemory(1024 * 1024 * 1024L)
        .withCpuCount(2)
));

方案2:构建适配arm64的Elasticsearch 1.7.3镜像

官方没有提供arm64版本的1.7.3镜像,可自行构建:

  1. 创建Dockerfile:
# 基于支持arm64的openjdk8镜像
FROM openjdk:8-jre

# 安装netcat(解决Testcontainers检查问题)及基础依赖
RUN apt-get update && apt-get install -y netcat && rm -rf /var/lib/apt/lists/*

# 下载并解压Elasticsearch 1.7.3
ENV ES_VERSION 1.7.3
RUN curl -L -O https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-$ES_VERSION.tar.gz \
    && tar -xzf elasticsearch-$ES_VERSION.tar.gz \
    && mv elasticsearch-$ES_VERSION /usr/share/elasticsearch \
    && rm elasticsearch-$ES_VERSION.tar.gz

# 配置环境变量
ENV PATH /usr/share/elasticsearch/bin:$PATH

# 禁用内存锁定,适配arm64架构
RUN echo "bootstrap.memory_lock: false" >> /usr/share/elasticsearch/config/elasticsearch.yml

# 创建数据目录并设置权限
RUN mkdir -p /usr/share/elasticsearch/data \
    && chown -R daemon:daemon /usr/share/elasticsearch

USER daemon

EXPOSE 9200 9300

CMD ["elasticsearch"]
  1. 在M1机器上执行构建命令:
docker build -t elasticsearch:1.7.3-arm64 .
  1. 在Testcontainers中使用本地构建的镜像:
ElasticsearchContainer container = new ElasticsearchContainer("elasticsearch:1.7.3-arm64")
    .waitingFor(Wait.forHttp("/")
        .forStatusCode(200));

方案3:调整Docker的QEMU模拟设置(针对官方amd64镜像)

如果坚持使用官方amd64镜像,需调整Docker资源配置:

  • 打开Docker Desktop设置,将内存分配提升至至少2GB,CPU分配到2核以上
  • 启用Use the new Virtualization framework选项(路径:Settings -> Features in development)
  • 运行容器时指定平台与资源限制:
docker run -d --platform linux/amd64 -m 1g -p 9200:9200 elasticsearch:1.7.3

内容的提问来源于stack exchange,提问作者Shashank Jain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 10:50:11