Docker 单节点
elasticsearch:8 镜像、健康检查、curl 验证。
30 分钟
Docker 单节点
本课用 Docker 启动 Elasticsearch 8 单节点,配合 curl 验证集群健康。与 postgresql-essentials Docker PG 实验类似,不替换 本机 MySQL80 服务。
学习目标
- 用
elasticsearch:8镜像启动单节点 - 配置内存、安全与端口映射
- 用
_cluster/health与索引 API 验证可用
核心内容
docker-compose 片段
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.15.0
environment:
- discovery.type=single-node
- xpack.security.enabled=false # 本地实验可关;生产必须开
- ES_JAVA_OPTS=-Xms512m -Xmx512m
ports:
- "9200:9200"
volumes:
- es_data:/usr/share/elasticsearch/data
volumes:
es_data:
启动:docker compose up -d elasticsearch。ES 8 默认启用 HTTPS 与安全;本地关 xpack.security 便于跟练,勿用于公网。
健康检查
curl -s "http://localhost:9200"
# 应返回 cluster_name、tagline
curl -s "http://localhost:9200/_cluster/health?pretty"
# status: yellow 正常(无副本节点)
创建实验 Index
curl -X PUT "localhost:9200/tracks" -H "Content-Type: application/json" -d '
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 0
}
}'
curl -s "localhost:9200/_cat/indices?v"
tracks 对应 CodeRoadMap 课程搜索实验;生产 cf_track 仍在 MySQL。
常见问题
| 现象 | 处理 |
|---|---|
| 容器 OOM 退出 | 降低 ES_JAVA_OPTS 或给 Docker 更多内存 |
| 9200 连接拒绝 | 等 30–60s 启动完成;查 docker logs |
| yellow 长期不变 | 单节点 + replicas=0 可接受;或设 number_of_replicas: 0 |
可选:同 compose 加 Kibana(es-kibana),端口 5601。es-spring 配置 spring.elasticsearch.uris;spring.datasource.url 保持 MySQL。
练习
- 启动 ES,确认 为 green 或 yellow