如何在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镜像,可自行构建:
- 创建
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"]
- 在M1机器上执行构建命令:
docker build -t elasticsearch:1.7.3-arm64 .
- 在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
相关产品推荐
相关产品推荐

