跳到主要内容

Docker 部署 Elasticsearch

本文是一份独立于业务项目的 Elasticsearch 容器部署参考。下面的单节点配置适合本地开发、功能验证和小规模内网环境;生产集群应按 Elastic 官方容量规划、安全和高可用文档设计。

版本与前置条件

  • 安装 Docker Engine 20.10.10 或更高版本,以及 Docker Compose v2。
  • 本文示例固定为 Elasticsearch 9.4.4,便于复现。部署前应根据 Elastic 支持矩阵选择仍受支持的补丁版本。
  • Elastic Stack 中的 Elasticsearch、Kibana、Logstash、Beats 等组件必须使用相同版本。
  • 为 Docker 分配至少 4 GB 内存;实际资源应按索引规模和查询负载评估。

不要使用 latest 标签。升级时先阅读目标版本的升级说明并完成快照备份。

单节点 Compose 示例

创建独立目录,并在其中保存以下两个文件。

.env

ELASTIC_VERSION=9.4.4
ELASTIC_PASSWORD=replace-with-a-long-random-password

compose.yaml

services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:${ELASTIC_VERSION}
restart: unless-stopped
ports:
- "127.0.0.1:9200:9200"
environment:
discovery.type: single-node
ELASTIC_PASSWORD: ${ELASTIC_PASSWORD}
xpack.security.enabled: "true"
# 仅为本机快速验证关闭 HTTP TLS;生产环境必须配置证书并启用 HTTPS。
xpack.security.http.ssl.enabled: "false"
ES_JAVA_OPTS: "-Xms1g -Xmx1g"
volumes:
- elasticsearch-data:/usr/share/elasticsearch/data
mem_limit: 4g
ulimits:
memlock:
soft: -1
hard: -1
healthcheck:
test:
[
"CMD-SHELL",
"curl -fsS -u elastic:$${ELASTIC_PASSWORD} http://localhost:9200/_cluster/health || exit 1",
]
interval: 10s
timeout: 5s
retries: 20
start_period: 30s

volumes:
elasticsearch-data:

端口只绑定到回环地址,不会直接暴露到局域网或公网。若应用也运行在同一个 Compose 网络中,可以删除 ports,通过服务名 elasticsearch:9200 访问。

启动服务:

docker compose pull
docker compose up -d
docker compose ps

验证

curl -u "elastic:${ELASTIC_PASSWORD}" http://127.0.0.1:9200
curl -u "elastic:${ELASTIC_PASSWORD}" \
http://127.0.0.1:9200/_cluster/health?pretty

若当前终端没有设置环境变量,可从 .env 读取密码或直接替换命令中的变量。不要把真实凭据写入脚本、镜像或版本库。

常用诊断命令:

docker compose logs --tail=200 elasticsearch
docker compose exec elasticsearch \
/usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic
docker stats

持久化、备份与升级

数据保存在命名卷 elasticsearch-data 中,重新创建容器不会删除该卷。卷不是备份:运行中的 Elasticsearch 数据目录不能靠文件复制获得一致备份。

生产环境应配置 Elasticsearch 快照仓库,并定期执行、验证和异地保存快照。升级前建议:

  1. 查看目标版本的破坏性变更和支持矩阵。
  2. 确认集群健康,并创建可恢复的快照。
  3. .env 中的版本改为明确的补丁版本。
  4. 执行 docker compose pull && docker compose up -d
  5. 再次检查集群健康、索引和应用查询。

安全与生产建议

  • 保持安全功能启用,生产环境配置 TLS,不要把 9200 或 9300 直接暴露到公网。
  • 使用 Docker Secret、编排平台 Secret 或受限权限的环境文件保存凭据。
  • 多节点集群需要独立故障域、明确的发现配置和至少三个符合规划的主节点候选;不要直接复制本文单节点配置扩容。
  • 持续监控 JVM 堆、磁盘水位、分片数量、查询延迟和集群健康。
  • 自定义宿主目录时,容器内 Elasticsearch 用户的 UID/GID 为 1000:0,目录必须具备正确权限。

停止与清理

# 停止并删除容器和网络,保留数据卷
docker compose down

# 仅查看本部署创建的数据卷
docker volume ls --filter name=elasticsearch

只有确认快照可用且不再需要数据时,才执行 docker compose down --volumes。该命令会永久删除命名卷中的索引数据。

官方资料