如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
尽管Elasticsearch已有关于在Docker环境中使用Elasticsearch的优质文档,但该文档主要关注Docker Compose在单实例之外的应用。之后,https://github.com/pires%E5%BC%80%E5%B1%95%E4%BA%86https://github.com/pires/kubernetes-elasticsearch-cluster%EF%BC%8C%E4%BD%BFElasticsearch%E8%83%BD%E4%B8%8EKubernetes%E8%89%AF%E5%A5%BD%E5%85%BC%E5%AE%B9%E3%80%82
本项目受https://github.com/pires%E7%9A%84https://github.com/pires/kubernetes-elasticsearch-cluster%E5%90%AF%E5%8F%91%EF%BC%8C%E5%85%81%E8%AE%B8%E5%9C%A8Kubernetes%E6%88%96OpenShift%E4%B8%8A%E8%BF%90%E8%A1%8C%E5%A4%A7%E8%A7%84%E6%A8%A1Elasticsearch%E7%94%9F%E4%BA%A7%E7%8E%AF%E5%A2%83%EF%BC%8C%E7%AE%80%E5%8C%96%E4%BA%86Kubernetes%E7%9B%B8%E5%85%B3%E9%85%8D%E7%BD%AE%EF%BC%88%E5%8C%85%E6%8B%AC%E6%B6%88%E9%99%A4%E5%AF%B9%E7%89%B9%E6%9D%83%E5%88%9D%E5%A7%8B%E5%8C%96%E5%AE%B9%E5%99%A8%E7%9A%84%E9%9C%80%E6%B1%82%EF%BC%89%EF%BC%8C%E5%B9%B6%E9%80%9A%E8%BF%87%E7%89%B9%E6%AE%8A%E5%A4%84%E7%90%86%E4%BD%BF%E4%B8%8D%E5%90%8C%E6%96%B0%E6%97%A7%E7%89%88%E6%9C%AC%EF%BC%88%E6%9C%80%E6%96%B0%E7%89%88%EF%BC%89%E7%9A%84Elasticsearch%E8%83%BD%E5%85%BC%E5%AE%B9%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%E7%9A%84%E5%BC%95%E5%85%A5%E4%B8%8E%E5%BC%83%E7%94%A8%E3%80%82
下文将介绍如何构建和独立运行本项目的Docker镜像,以及如何使用附带的Kubernetes文件部署n规模集群(已在Kubernetes 1.10+和OpenShift 3.9上测试)。
截至本文撰写时(2019-04-08),这些Dockerfile已用于Elasticsearch 6.4.3、6.5.4、6.6.2和6.7.1版本。
构建和运行Docker镜像需要较新版本的Docker。本地独立运行时(无需处理大量请求),建议至少4G内存和1-2个CPU核心。
在Kubernetes上运行需Kubernetes集群,已在1.10、1.12版本及OpenShift 3.9附带的Kubernetes服务上测试。资源需求差异较大,示例配置:12节点集群(3个主节点、3个数据节点、3个摄入节点、3个客户端节点),总计约12核CPU、60GB内存和100GB存储。
关于存储:Elasticsearch数据在GlusterFS存储上存在已知严重问题。GlusterFS团队在https://github.com/gluster/glusterfs/issues/517%E8%B7%9F%E8%B8%AA%E8%BF%99%E4%BA%9B%E9%97%AE%E9%A2%98%EF%BC%8CRed Hat也在此处、此处和此处记录了相关问题。
若使用GlusterFS 4.1之前版本,必须使用https://github.com/gluster/gluster-kubernetes/blob/master/docs/design/gluster-block-provisioning.md%E5%AD%98%E5%82%A8%EF%BC%8C%E5%90%A6%E5%88%99%E4%BC%9A%E5%9B%A0ctime/mtime/utime%E5%B7%AE%E5%BC%82%E5%AF%BC%E8%87%B4%E9%94%81%E6%96%87%E4%BB%B6%E4%BF%AE%E6%94%B9%E9%97%AE%E9%A2%98%EF%BC%88%E8%AF%A6%E8%A7%81%E5%89%8D%E6%96%87%E9%93%BE%E6%8E%A5%EF%BC%89%E3%80%82%E8%8B%A5%E4%BD%BF%E7%94%A8GlusterFS 4.1及以上版本,需在数据卷上启用ctime特性。
内存设置说明:本配置假设JVM版本为1.8.0 R191或更高,这些版本支持+EnableContainerSupport、+InitialRAMPercentage和+MaxRAMPercentage特性,可根据Kubernetes YAML文件中Pod的内存分配动态为JVM提供堆内存,无需显式指定JVM内存大小。
最后,假设使用较新的现代操作系统环境,docker和kubectl命令已添加到PATH,且能使用cmd.exe、powershell、ksh或bash。
本项目基于最小Linux+OpenJDK镜像构建,提取标准Elasticsearch tar包,通过自定义setup.sh和run.sh脚本安装并启动。
Dockerfile继承自Red Hat的https://github.com/jboss-container-images/openjdk%E9%95%9C%E5%83%8F%E3%80%82%E7%90%86%E8%AE%BA%E4%B8%8A%EF%BC%8C%E4%BB%BB%E4%BD%95%E5%8C%85%E5%90%ABOpenJDK 8+(Elasticsearch 6.2+可运行于OpenJDK 9/10/11)及bash、curl命令的镜像均可运行,但Red Hat镜像的优势在于承诺持续更新,优于常规OpenJDK镜像的现状。
Red Hat的"OpenJDK生命周期和支持政策"文档指出:"问:生命周期日期是否适用于OpenShift中的OpenJDK镜像?答:是。OpenJDK 8的生命周期适用于Red Hat容器目录中的容器镜像,OpenJDK 11的生命周期将在其发布后适用。"
以下是独立Docker镜像的构建和运行步骤:
docker build -t someorg/elasticsearch .docker run -d -p 9200:9200 -p 9300:9300 --rm --name es someorg/elasticsearchdocker logs -f es(按<ctrl-c>停止查看)curl http://localhost:9200(返回基本信息JSON)清理步骤:
docker stop esdocker run带--rm时无需):docker container prunedocker volume prunedocker rmi someorg/elasticsearchdocker rmi registry.access.redhat.com/redhat-openjdk-18/openjdk18-openshift上述步骤运行的是默认配置的独立Elasticsearch节点,未使用环境变量自定义配置。通过修改环境变量和Docker设置,单个镜像可在Elasticsearch环境中承担不同角色,这是在Kubernetes环境中运行的关键。
kubernetes子目录包含Kubernetes环境中的资源配置YAML文件,包括四种资源类型:
这些资源分别对应服务配置的关键方面:外部访问方式(route)、内部通信端口(service)、需保持状态和身份的系统(statefulset)、可替换的无状态工作节点(deployment)。
Kubernetes目录中的YAML文件通过设置环境变量,将Docker镜像配置为Elasticsearch集群中的特定角色。部署步骤如下(需Kubernetes环境及kubectl命令):
kubectl create -f service-es-transport.yamlkubectl create -f service-es-http.yamlkubectl create -f route-es-http.yamlkubectl create -f statefulset-es-master.yamlkubectl create -f statefulset-es-data.yamlkubectl create -f deployment-es-ingest.yamlkubectl create -f deployment-es-client.yaml默认配置适用于中等规模生产环境(约60GiB内存、12核CPU)。测试环境可降低资源分配。注意:Pod内存分配通常需为JVM内存(-Xms和-Xmx)的两倍。此外,Kubernetes中的持久存储类名称可能与YAML文件中不同,可通过kubectl get sc查看可用存储类。
OpenShift v3及以上基于Kubernetes构建,增加了镜像构建、版本控制、认证和隔离等功能,详情见okd.io。
OpenShift保持与Kubernetes的兼容性,可通过oc login登录后,将上述kubectl命令替换为oc执行,例如:oc create -f service-es-transport.yaml。
Docker镜像可在构建和运行时通过参数(ARG)和环境变量(ENV)进行配置。ARG仅在构建时(docker build)生效,ENV在构建和运行时(docker run)均生效。
默认值:none
构建时用于curl获取 artifacts 的代理URL。示例值:http://proxy.example.com:8080。
默认值:none
指定不使用代理的IP地址和(部分)主机名列表(逗号分隔)。可部分匹配主机名(如.example.com匹配所有以.example.com结尾的主机)。示例值:localhost,127.0.0.1,.example.com。
默认值:/elasticsearch
Elasticsearch安装的主目录。请勿修改,否则会导致意外结果。
默认值:/elasticsearch/bin:$PATH
镜像的默认路径,前缀为Elasticsearch的bin目录。修改时需确保/elasticsearch/bin为首个条目。
默认值:true
Elasticsearch 6.5.0及以上版本可用,6.5.0之前版本无效。允许或禁止mmapfs作为索引后端。若无法将vm.max_map_count设置为至少262144(无root权限),可设为false,并确保ES_INDEX_STORE_TYPE设为niofs或simplefs。
当Elasticsearch检测到非本地主机运行时,会执行启动检查,包括vm.max_map_count是否至少262144。6.5.0之前版本即使index.store.type设为非mmapfs也无法跳过该检查(因index.store.type仅为默认值,可在索引创建时覆盖)。vm.max_map_count仅在index.store.type为mmapfs且node.store.allow_mmapfs为true(Linux和macOS上index.store.type为fs或mmapfs时的默认值)时相关。
默认值:-Xms1g -Xmx1g -XX:ParallelGCThreads=1
用于设置JVM参数。默认配置将最小和最大堆大小设为相等(禁用动态伸缩以避免性能损耗),并将ParallelGCThreads设为1(确保最多1个并发垃圾回收线程)。此设置针对jvm.options中配置的CMS(ConcurrentMarkSweep)垃圾收集器。
可在jvm.options文件中设置这些参数,但通过环境变量可按实例覆盖。
默认值:https://artifacts.elastic.co/downloads/elasticsearch
控制setup.sh获取安装包的地址。若ES_VERSION为快照版本,需设为https://snapshots.elastic.co/downloads/elasticsearch;稳定版本使用默认值即可。
默认值:46095ACC8548582C1A2699A9D27D666CD88E42B4
Elastic Co用于签名发布 artifacts 的公钥ID。setup.sh使用此ID和下载的哈希文件从PGP密钥服务器获取公钥,验证下载 artifacts 的有效性。
默认值:elasticsearch-default
Elasticsearch集群名称。
默认值:none
设置Elasticsearch配置中的discovery.zen.ping.unicast.hosts。Zen Discovery是Elasticsearch默认的集群节点发现模块。Kubernetes配置文件将此值设为es-transport(定义节点间传输端口9300的Kubernetes服务名称)。
注意:Elastic Co文档指出该值可为主机列表,Kubernetes服务名称的DNS条目可能解析为多个主机(DNS轮询)。
默认值:*
允许的跨域请求源(详见下文ES_HTTP_CORS_ENABLE)。若值前后添加/,将被视为正则表达式,例如/https?:\/\/localhost(:[0-9]+)?/支持HTTP和HTTPS。
默认值*存在安全风险(允许任何来源的跨域请求),建议修改。更多信息见Elastic Co的HTTP模块文档。
默认值:true
启用或禁用跨域资源共享(CORS),即允许其他源的客户端执行请求。详见跨域资源共享。
默认值:true
默认情况下,向不存在的索引POST文档会自动创建索引。可通过设为.kibana*,.logstash*,.management*,.monitoring*,.security*,.triggered_watches*,.watcher-history*,.watches*禁用自动创建(需显式创建索引)。注意:值不能为false,需为允许自动创建的索引白名单。
默认值:fs
默认由Elasticsearch选择索引存储类型实现(Linux和macOS为mmapfs,Windows为simplefs)。
此值仅指定默认索引存储类型,不限制索引创建时指定的存储类型。另见ES_ALLOW_MMAPFS。更多信息见存储模块文档。
默认值:1
限制可访问本地数据路径的Elasticsearch进程数,几乎所有情况下应设为1。若本地运行多个Elasticsearch进程且需访问同一数据路径,可增加此值。生产环境通常不应大于1。详见Elasticsearch参考指南的节点数据路径设置。
默认值:false
Elasticsearch参考指南:JVM执行 major GC 时会触及堆的每个页面,若页面被换出到磁盘,需换回内存,导致大量磁盘抖动,影响请求处理。
有多种方法配置系统禁止交换,其中一种是通过mlockall(Unix)或virtuallock(Windows)请求JVM锁定堆内存,通过Elasticsearch的bootstrap.memory_lock设置实现。
但有时设置后Elasticsearch可能无法锁定堆(如elasticsearch用户无memlock unlimited权限)。内存锁定检查用于验证bootstrap.memory_lock启用时JVM是否成功锁定堆。
默认false禁用检查,若确认有memlock unlimited权限,可设为true。
默认值:_site_
Elasticsearch绑定的主机名或IP地址,并向集群其他节点广播。接受IP地址、主机名、特殊值或其组合数组。
特殊值:_[networkInterface]_(网络接口地址,如_en0_)、_local_(系统回环地址,如127.0.0.1)、_site_(系统站点本地地址,如192.168.0.1、172.16.0.1、10.0.0.1)、_global_(系统全局地址,如8.8.8.8)。
默认值:true
是否作为数据节点。
默认值:true
是否作为摄入节点。
默认值:true
是否作为主节点。
默认值:1
设置discovery.zen.minimum_master_nodes,即新选举的主节点需加入的最小主节点数,以完成选举并确认主节点身份。
该设置还控制活动集群中需存在的最小活动主节点数,若不满足,活动主节点将退位并重新选举。
必须设为主节点数的法定人数(主节点数/2 + 1)。建议避免仅2个主节点(法定人数为2,任一节点故障导致集群不可用)。实践中,3个主节点且minimum_master_nodes=2是良好选择。详见[避免脑裂](https://
以下是 raaftech/elasticsearch 相关的常用 Docker 镜像,适用于 不同场景 等不同场景:
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。



来自真实用户的反馈,见证轩辕镜像的优质服务