在现代开发中,Elasticsearch 是一个非常受欢迎的分布式搜索引擎,广泛应用于日志收集、数据分析和实时搜索等场景。由于 Elasticsearch 提供强大的查询和分析功能,它成为了许多企业架构的核心部分。通过 Docker 和 Docker Compose 安装 Elasticsearch 可以大大简化部署和管理流程。本文将介绍如何使用 Docker Compose 安装 Elasticsearch,并重置本地用户的密码。
1. 环境准备
在开始安装之前,确保你的系统上已经安装了 Docker 和 Docker Compose。以下是安装步骤:
安装 Docker 和 Docker Compose
-
**Docker**:[Docker 安装指南](https://docs.docker.com/get-docker/)
-
**Docker Compose**:[Docker Compose 安装指南](https://docs.docker.com/compose/install/)
如果已经安装了 Docker 和 Docker Compose,可以跳过这一步。
2. 使用 Docker Compose 安装 Elasticsearch
2.1 创建 `docker-compose.yml` 配置文件
为了简化 Elasticsearch 服务的管理,我们可以使用 Docker Compose 来定义和启动服务。创建一个 `docker-compose.yml` 文件,其中定义了 Elasticsearch 服务。```yaml
networks:
minutel_docker_net:
driver: bridge
services:
elasticsearch:
container_name: elasticsearch # 容器名为'elasticsearch'
image: elasticsearch:8.13.4 # elasticsearch:7.17.1
restart: unless-stopped # 指定容器退出后的重启策略为始终重启,但是不考虑在Docker守护进程启动时就已经停止了的容器
volumes: # 数据卷挂载路径设置,将本机目录映射到容器目录
- "./data/elasticsearch/config:/usr/share/elasticsearch/config"
- "./data/elasticsearch/data:/usr/share/elasticsearch/data"
- "./data/elasticsearch/logs:/usr/share/elasticsearch/logs"
- "./data/elasticsearch/plugins:/usr/share/elasticsearch/plugins"
environment: # 设置环境变量,相当于docker run命令中的-e
- "TZ=Asia/Shanghai"
- "LANG=en_US.UTF-8"
- "discovery.type=single-node"
- "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"
ports:
- "9200:9200"
- "9300:9300"
networks:
- minutel_docker_net
kibana:
container_name: kibana
image: kibana:8.13.4 # kibana:7.17.1
restart: unless-stopped
volumes:
- "./data/kibana/config/:/usr/share/kibana/config/"
ports:
- "5601:5601"
depends_on:
- elasticsearch
links:
- elasticsearch
networks:
- minutel_docker_net
mysql:
image: mysql:8.0
container_name: mysql8
environment:
MYSQL_ROOT_PASSWORD: 132134
volumes:
- "./data/mysql/data:/var/lib/mysql"
- "./data/mysql/log:/var/log/mysql"
networks:
- minutel_docker_net
ports:
- "3306:3306"
redis:
image: redis:5.0
container_name: redis5
networks:
- minutel_docker_net
ports:
- "6379:6379"
```
-
**image**:指定使用的 Elasticsearch 镜像版本,这里使用的是 `8.6.0`。
-
**container_name**:容器的名称,这里指定为 `elasticsearch`。
-
**environment**:环境变量设置:
-
`discovery.type=single-node`:表示启用单节点模式,不需要集群。
-
`ELASTIC_PASSWORD=changeme`:设置 Elasticsearch 默认超级用户 `elastic` 的密码为 `changeme`。
-
**ports**:将容器的 9200 端口和 9300 端口分别映射到宿主机的 9200 和 9300 端口,这样我们就能通过 `localhost:9200` 访问 Elasticsearch 服务。
-
**volumes**:使用 Docker 卷来持久化 Elasticsearch 数据,防止容器停止后数据丢失。
-
**networks**:指定使用 `bridge` 网络驱动,确保容器与宿主机之间的网络通信。
2.2 启动 Elasticsearch 服务
创建好 `docker-compose.yml` 文件后,使用以下命令启动 Elasticsearch 服务:
(注意,由于dcoker的使用需要开启vpn,自行处理vpn问题,否则报错如下)

```bash
docker-compose up -d
``

这条命令会启动所有定义在 `docker-compose.yml` 文件中的服务,并在后台运行。稍等片刻,Elasticsearch 服务就会启动起来。

2.3 检查服务是否启动成功
启动完毕后,我们可以通过访问 `http://localhost:9200` 来确认 Elasticsearch 服务是否正常运行。你可以使用以下命令:
```bash
curl -u elastic:changeme http://localhost:9200
```
如果一切正常,你将看到类似如下的响应:
```json
{
"name" : "elasticsearch",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "abc123",
"version" : {
"number" : "8.6.0",
"build_flavor" : "default",
"build_type" : "deb",
"build_hash" : "abc123",
"build_date" : "2025-04-18T12:00:00.000Z",
"build_snapshot" : false,
"lucene_version" : "8.9.0",
"minimum_wire_compatibility_version" : "8.6.0",
"minimum_index_compatibility_version" : "8.6.0"
},
"tagline" : "You Know, for Search"
}
```

3. 重置 Elasticsearch 用户密码
3.1 进入 Elasticsearch 容器
Elasticsearch 提供了一个 `elasticsearch-reset-password` 工具来帮助用户重置密码。为了执行这个工具,首先需要进入容器内部。
```bash
docker exec -it elasticsearch /bin/bash
```
3.2 使用 `elasticsearch-reset-password` 工具
进入容器后,使用以下命令来重置默认的 `elastic` 用户密码:
```bash
bin/elasticsearch-reset-password -u elastic
```
此命令会提示你是否确认重置密码,输入 `y` 确认后,系统会自动生成一个新的密码并显示在控制台中。记住这个密码,因为后续连接 Elasticsearch 时需要用到。
3.3 退出容器并测试新密码
重置密码后,可以退出容器:
```bash
exit
```
然后,使用新的密码通过以下命令访问 Elasticsearch 服务:
```bash
curl -u elastic:<new-password> http://localhost:9200
```
将 `<new-password>` 替换为重置后显示的密码。如果成功连接,您将看到类似之前的响应信息。
4. 总结
通过 Docker Compose 安装 Elasticsearch 并重置密码的过程非常简便。利用 Docker Compose,您可以轻松管理 Elasticsearch 服务,快速启动和停用服务,并通过配置文件灵活地定制容器环境。
在安装和配置过程中,我们通过创建 `docker-compose.yml` 文件来定义服务的配置,简化了部署步骤。通过容器内部的 `elasticsearch-reset-password` 工具,我们能够方便地重置用户密码,确保安全性。
使用 Docker 和 Docker Compose 安装 Elasticsearch 不仅提高了开发效率,还能让我们在本地环境中轻松测试和开发基于 Elasticsearch 的应用程序。