安装版本 elasticsearch 8.14.1
拉取镜像
docker pull elasticsearch:8.14.1
如需安装kibana 需要拉取对应版本的kibana镜像
docker pull kibana:8.14.1
查看镜像是否安装成功
docker images
配置docker-compose.yaml
version: '3'
services:es:# 镜像名称image: elasticsearch:8.14.1# 容器名称container_name: esnetworks:- elastic# 端口映射ports:- "9200:9200"- "9300:9300"# 文件映射volumes:- ./data:/usr/share/elasticsearch/data # 数据- ./logs:/usr/share/elasticsearch/logs # 日志- ./plugins:/usr/share/elasticsearch/plugins # 插件- ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml # 配置文件# 环境配置environment:- "TZ=Asia/Shanghai"- "discovery.type=single-node" # 单节点- "ES_JAVA_OPTS=-Xms1g -Xmx1g" # 内存限制(按需配置)- "ELASTIC_PASSWORD=123456" # 密码(需要调用接口鉴权的时候配置) 用户名:elastic 密码:123456kibana:image: kibana:8.14.1container_name: kibananetworks:- elasticports:- "5601:5601"environment:- "I18N_LOCALE=zh-CN"- "ELASTICSEARCH_HOSTS=http://es:9200"# Kibana 连接 Elasticsearch 的账号密码,不可用于登录- "ELASTICSEARCH_USERNAME=kibana_system"- "ELASTICSEARCH_PASSWORD=123456"
networks:elastic:driver: bridge
elasticsearch.yml 配置文件
cluster.name: "docker-cluster"
network.host: 0.0.0.0
discovery.type: "single-node"
# 无需账号密码(需要配置为true)
xpack.security.enabled: false
运行docker-compose
docker-compose up -d es
此时会自动生成 data logs plugins 这几个文件
会发现elasticsearch无法启动,可能的原因是文件权限问题。Elasticsearch 使用的用户通常是 elasticsearch,而宿主机这几个文件夹是root用户,elasticsearch没有写入权限
解决方案1: 在宿主机上修改挂载文件夹的权限,使其对容器内的用户可访问。给data和logs 添加权限
chmod -R 777 data/ logs/ plugins/
docker-compose restart es
这样es容器就启动起来了,但可能存在安全风险,建议仅在开发环境中使用。
解决方案2:es容器使用elasticsearch 作为启动用户,他的用户和组id 为1000:1000,可在宿主机改变挂载文件夹所属用户和所属组再重启
chown -R 1000:0 data/ logs/ plugins/
docker-compose restart es
安装ik分词器
将对应版本的ik分词器解压放到plugins文件夹中 重启es容器,使用一下命令查看是否安装成功
curl http://localhost:9200/_cat/plugins
配置分词远程词库(默认拉取时间间隔为60秒)
cd ./plugins/ik/config
编辑配置文件 IKAnalyzer.cfg.xml 重启es容器
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties><comment>IK Analyzer 扩展配置</comment><!--用户可以在这里配置自己的扩展字典(不使用) --><entry key="ext_dict"></entry><!--用户可以在这里配置自己的扩展停止词字典(不使用)--><entry key="ext_stopwords"></entry><!--用户可以在这里配置远程扩展字典如下 确保容器中可访问该链接 --><entry key="remote_ext_dict">http://xxx.xxx.xxx/stopwords.txt</entry><!--用户可以在这里配置远程扩展停止词字典如下 确保容器中可访问该链接 --><entry key="remote_ext_stopwords">http://xxx.xxx.xxx/stopwords.txt</entry>
</properties>