Docker部署Elasticsearch:零基础也能上手的

Docker部署Elasticsearch:零基础也能上手的

Docker部署Elasticsearch:零基础也能上手的完整操作指南


很多新手想在服务器上搭建搜索服务,但直接安装Elasticsearch会遇到版本兼容、依赖缺失等麻烦。

Docker部署Elasticsearch可以省掉环境配置的烦恼,一条命令就能跑起来。

这篇教程从零开始,讲清楚每一步做什么、为什么这么做,以及遇到报错怎么解决。


部署前需要准备什么?



  1. 一台装有Linux的服务器(CentOS 7+ / Ubuntu 18.04+)或本地虚拟机。

  2. Docker已安装。没装的话,依次执行以下命令(以Ubuntu为例):


   sudo apt update
sudo apt install docker.io -y
sudo systemctl enable docker
sudo systemctl start docker

验证:sudo docker version 能看到Client和Server版本即成功。



  1. 了解Docker基本概念:镜像(Image)相当于安装包,容器(Container)是运行中的实例。


用Docker运行Elasticsearch的完整步骤


第1步:拉取官方镜像

Elasticsearch官方提供了多个版本。这里用当前稳定版 7.17.18(兼容性好,JDK版本要求低):


sudo docker pull elasticsearch:7.17.18

等待下载完成。


第2步:创建挂载目录并启动容器

为了让数据和配置持久保存,需要把容器内的目录映射出来:


sudo mkdir -p /data/elasticsearch/{data,logs,config}
sudo chmod 777 /data/elasticsearch -R

然后启动容器(注意修改后的端口映射和内存限制):


sudo docker run -d \
--name elasticsearch \
--restart unless-stopped \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-v /data/elasticsearch/data:/usr/share/elasticsearch/data \
-v /data/elasticsearch/logs:/usr/share/elasticsearch/logs \
-v /data/elasticsearch/config:/usr/share/elasticsearch/config \
elasticsearch:7.17.18


  • -e "discovery.type=single-node" 表示单节点模式,适合开发测试。

  • -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" 限定Java堆内存为512MB,防止占用过多服务器资源。

  • 如果服务器内存只有1G,建议改为256m。


第3步:检查容器是否正常运行


sudo docker ps

如果看到容器状态为 Up,说明启动成功。

再查看日志确认:


sudo docker logs elasticsearch --tail 50

看到类似 "started" 和端口 9200 的日志就对了。


第4步:配置跨域(可选但推荐)

如果需要从Web前端或Kibana访问,需要开启跨域。进入容器修改配置:


sudo docker exec -it elasticsearch bash
cd config/
echo "http.cors.enabled: true" >> elasticsearch.yml
echo "http.cors.allow-origin: \"*\"" >> elasticsearch.yml
exit

然后重启容器:sudo docker restart elasticsearch注意:生产环境请指定具体域名,不要用通配符 *


避坑指南:常见报错和解决办法


问题1:容器启动后马上退出

查看日志 sudo docker logs elasticsearch,若报错 max virtual memory areas vm.max_map_count [65530] is too low,执行以下命令临时解决:


sudo sysctl -w vm.max_map_count=262144

永久生效需写入 /etc/sysctl.conf


echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

问题2:无法访问9200端口

先检查防火墙:


sudo ufw status

如果开启,放行端口:sudo ufw allow 9200

再检查容器是否绑定到0.0.0.0:sudo docker port elasticsearch,应该输出 9200/tcp -> 0.0.0.0:9200


问题3:内存不足导致容器OOM被杀

降低 ES_JAVA_OPTS 的值,比如改为 -Xms256m -Xmx256m,然后重建容器。或者升级服务器配置。


验证部署是否成功



  1. 访问REST API


   curl http://localhost:9200

返回类似下面的JSON表示服务正常:


   {
"name" : "node-1",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "...",
"version" : {"number":"7.17.18",...},
"tagline" : "You Know, for Search"
}


  1. 创建测试索引


   curl -X PUT "localhost:9200/test-index" -H 'Content-Type: application/json' -d'{"settings":{"number_of_shards":1,"number_of_replicas":0}}'

返回 {"acknowledged":true} 说明索引创建成功。



  1. 写入和搜索数据


   curl -X POST "localhost:9200/test-index/_doc" -H 'Content-Type: application/json' -d'{"title":"Docker部署Elasticsearch","content":"这是一篇教程"}'
curl -X GET "localhost:9200/test-index/_search?q=title:Docker"

如果返回命中1条结果,说明搜索引擎正常工作。


额外优化建议



  • 开启认证:单节点测试可以不用,但生产环境建议开启X-Pack安全。

  • 使用Docker Compose:如果需要同时部署Kibana和Logstash,推荐用docker-compose统一管理。

  • 监控日志:定期查看日志目录 /data/elasticsearch/logs,及时处理磁盘告警。


如果你正在自己动手Docker部署Elasticsearch,建议先按本文步骤完整执行一遍,再根据实际需求微调内存和端口;

遇到异常时优先回看避坑指南部分,基本能解决90%的新手问题。

分享到:
上一篇
Linux流量监控iftop:新手也能搞定的Linux流量监
下一篇
零基础搭建服务器摄像头监控系统,实时画面网页看
1
系统公告

泽御云五一特惠活动🔥

泽御云持证合规运营,资质齐全可查,长久稳定! 五一限时多重福利同步开启: ✅ 香港 2 核 2G 云服务器超值拼团,低价入手团长免费 ✅ 4 核 4G 多机房年付拼团,性价比拉满 ✅ 内蒙古新区限时 7 折(zeyuyunnmg)特惠,专属优惠码锁价续费 ✅ 全站通用 75 折优惠,老用户充值享专属赠金 官方站点:zeyuyun.com 合规资质齐全|售后有保障|活动限时错过不再有
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意