Windows基于Docker安装Elasticsearch和 kibana笔记

5 阅读11分钟

Windows基于Docker安装Elasticsearch和 kibana笔记 一、Windows安装Docker

1、Windows安装Docker要求
2、Docker安装

二、基于Docker安装Elasticsearch

1、安装Elasticsearch
2、Elasticsearch的XPACK验证
2.1、什么是Xpack
2.2、Xpack相关安全配置介绍
2.2.1、xpack.security.enabled
2.2.2 、xpack.security.http.ssl
2.2.3、xpack.security.transport.ssl
2.3、创建证书
1. 进入docker容器
2. 创建证书颁发机构
3. 为节点生成证书和私钥
4. 在elasticsearch/config目录下创建下certs目录
5. 将elastic-certificates.p12文件可剪切到certs目录下
2.4、给keystore和truststore设置密码
2.5、修改elasticsearch.yml配置文件并重启elasticsearch
2.6、重置用户密码
2.7、登录ES

三、基于Docker安装Kibana

1、安装Elasticsearch
2、配置kibana认证

四、安装IK分词器

1、下载IK分词器
2、安装IK分词器

一、Windows安装Docker 1、Windows安装Docker要求 1.1、Windows 版 Docker 需要运行在一个安装了 64 位 Windows 10 操作系统的计算机上,通过启动一个独立的引擎来提供 Docker 环境。

1.2、需要启用 Windows 操作系统中的 Hyper-V 和容器特性。

1) 右键单击 Windows 开始按钮并选择“应用和功能”页面。

2)单击“程序和功能”链接。

3) 单击“启用或关闭Windows功能”。

4)确认Hyper-V和容器复选框已经被勾选,并单击确定按钮。

按上述步骤操作完成后,会安装并开启 Hyper-V 和容器特性,如下图所示。这时需要重启操作系统。

2、Docker安装 1)访问docker官网(www.docker.com/),选择windows… 下载 docker desktop。

2)docker安装完成后以管理员身份运行docker。

3)打开PowerShell,并尝试执docker version命令。

4)docker desktop 安装完成。

二、基于Docker安装Elasticsearch 1、安装Elasticsearch 1)通过docker hub官网(hub.docker.com/)寻找 elasticsearch镜像。

2)寻找合适的elasticsearch版本

3)通过Windows的PowerShell命令,下载docker镜像

docker pull elasticsearch:8.7.1

4)查看镜像

docker images elasticsearch 

5)因为docker和kibana需要共享同一个网络,所以利用docker创建一个共享网络es-net

docker network create es-net

6)查看共享网络

docker network ls

7)运行elasticsearch(在PowerShell中执行时,需要把""移除)

docker run -d --name es \
        -e "ES_JAVA_OPTS=-Xms1024m -Xmx1024m" \
        -e "discovery.type=single-node" \
        -v C:\Users\14547\Desktop\lyq\elasticsearch\es-data:/usr/share/elasticsearch/data \
        -v C:\Users\14547\Desktop\lyq\elasticsearch\es-plugins:/usr/share/elasticsearch/plugins \
        -v C:\Users\14547\Desktop\lyq\elasticsearch\temp:/usr/temp \
        --privileged \
        --network es-net \
        -p 9200:9200 \
        -p 9300:9300 \
        elasticsearch:8.7.1

8)运行参数详解

-d 										#容器后台运行
--name es 								#容器命名
-e "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"  	#设置容器最小最大运行内存
-e "discovery.type=single-node" 		#设置es的运行模式是单机运行
-v C:\Users\14547\Desktop\lyq\elasticsearch\es-data:/usr/share/elasticsearch/data  #数据卷,方便容器持久化
-v C:\Users\14547\Desktop\lyq\elasticsearch\es-plugins:/usr/share/elasticsearch/plugins #数据卷,方便容器持久化
-v C:\Users\14547\Desktop\lyq\elasticsearch\temp:/usr/temp #数据卷,方便容器持久化
--privileged 							#以最大权限运行容器
--network es-net 						#执行容器运行网络,与kibana运行保持在同一网络
-p 9200:9200 							#开放端口
-p 9300:9300 							#开放端口
elasticsearch:8.7.1 					#运行镜像和tag

9)查看容器运行情况

docker ps -f name=es

10)访问es,地址:http ://localhost:9200/,需要密码验证

2、Elasticsearch的XPACK验证 2.1、什么是Xpack X-Pack是Elastic Stack扩展功能,提供安全性,警报,监视,报告,机器学习和许多其他功能。 ES7.0+之后,默认情况下,当安装Elasticsearch时,会安装X-Pack,无需单独再安装。 自6.8以及7.1+版本之后,基础级安全永久免费。

2.2、Xpack相关安全配置介绍 2.2.1、xpack.security.enabled 默认为true,启用节点上ES的XPACK安全功能,相当于总开关

2.2.2 、xpack.security.http.ssl 这个是用来开启https的,以及对应的设置,整体配置项如下:

xpack.security.http.ssl:
  enabled: false 【开启还是关闭】
  verification_mode: certificate【如下】
   【full:它验证所提供的证书是否由受信任的权威机构(CA)签名,并验证服务器的主机名(或IP地址)是否与证书中识别的名称匹配。】
   【certificate:它验证所提供的证书是否由受信任的机构(CA)签名,但不执行任何主机名验证。】
   【none:它不执行服务器证书的验证。】
  truststore.path: certs/elastic-certificates.p12 【信任存储库文件的存放位置】
  keystore.path: certs/elastic-certificates.p12【密钥存储库文件的存放位置】

2.2.3、xpack.security.transport.ssl 这个是传输层的认证设置,整体配置项如下:

xpack.security.transport.ssl:
  enabled: true【开启还是关闭】
  verification_mode: certificate【如下】
   【full:它验证所提供的证书是否由受信任的权威机构(CA)签名,并验证服务器的主机名(或IP地址)是否与证书中识别的名称匹配。】
   【certificate:它验证所提供的证书是否由受信任的机构(CA)签名,但不执行任何主机名验证。】
   【none:它不执行服务器证书的验证。】
  keystore.path: certs/elastic-certificates.p12【信任存储库文件的存放位置】
  truststore.path: certs/elastic-certificates.p12【密钥存储库文件的存放位置】

2.3、创建证书

  1. 进入docker容器 进入docker容器的方法有两种: 1)通过PowerShell,执行命令,进入容器内部执行命令

docker exec -it es bash

2)通过docker desk,查看具体的容器,可以在docker desktop执行相关命令

在Terminal中可以执行相关的命令。

  1. 创建证书颁发机构 提示命名文件:直接回车,默认文件名elastic-stack-ca.p12文件(建议使用默认文件名) 提示输入密码:输入密码进行设置(也可以直接回车)

     ./bin/elasticsearch-certutil ca
    
  2. 为节点生成证书和私钥 提示命名文件,直接回车,默认文件名elastic-certificates.p12文件 提示输入密码:输入密码进行设置(也可以直接回车)

     ./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
    
  3. 在elasticsearch/config目录下创建下certs目录 进入docker容器后,默认所处目录为elasticsearch所在目录

     mkdir config/certs 
    
  4. 将elastic-certificates.p12文件可剪切到certs目录下

     mv elastic-certificates.p12 config/certs/
    

2.4、给keystore和truststore设置密码 keystore可以看成一个放key的库,key就是公钥,私钥,数字签名等组成的一个信息。truststore是放信任的证书的一个store。 truststore和keystore的性质是一样的,都是存放key的一个仓库,区别在于,truststore里存放的是只包含公钥的数字证书,代表了可以信任的证书,而keystore是包含私钥的。

1)执行以下命令。如果在创建证书的过程中加了密码,需要输入这个密码。每个节点都需要。

./bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password

./bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password

./bin/elasticsearch-keystore add xpack.security.http.ssl.keystore.secure_password

./bin/elasticsearch-keystore add xpack.security.http.ssl.truststore.secure_password

2)检查config目录下keystore文件

cd config

2.5、修改elasticsearch.yml配置文件并重启elasticsearch 1)打开docker desktop,进入到es容器。

2)在Files目录下找到elasticsearch.yml文件。(容器内文件绝对路径:/usr/share/elasticsearch/config/elasticsearch.yml)

3)修改配置文件内容,如下:

xpack.security.enabled: true

xpack.security.enrollment.enabled: true

xpack.security.http.ssl:
  enabled: false
  verification_mode: certificate
  truststore.path: certs/elastic-certificates.p12
  keystore.path: certs/elastic-certificates.p12

xpack.security.transport.ssl:
  enabled: true
  verification_mode: certificate
  keystore.path: certs/elastic-certificates.p12
  truststore.path: certs/elastic-certificates.p12

4)重启docker容器

2.6、重置用户密码 集群中的节点都按照上面的方式完成配置并启动后,就可以设置账号密码了。 1)es共有3个默认账户:

elastic 账号:拥有 superuser 角色,是内置的超级用户。 kibana 账号:拥有 kibana_system 角色,用户 kibana 用来连接 elasticsearch 并与之通信。Kibana 服务器以该用户身份提交请求以访问集群监视 API 和 .kibana 索引。不能访问 index。 logstash_system 账号:拥有 logstash_system 角色。用户 Logstash 在 Elasticsearch 中存储监控信息时使用。 2)自动创建密码(elastic、kibana 、Logstash账号,密码均会重置)

./bin/elasticsearch-setup-passwords auto

3)手动输入密码(需要重置elastic、kibana 、Logstash账号密码)

./bin/elasticsearch-setup-passwords interactive

4)重置用户密码(随机密码)

./bin/elasticsearch-reset-password -u elastic

5)重置用户密码(指定密码)

./bin/elasticsearch-reset-password -u elastic -i <password>

2.7、登录ES 1)登录http://localhost:9200/,输入账号密码。展示es版本信息。

三、基于Docker安装Kibana 1、安装Elasticsearch 1)通过docker hub官网(hub.docker.com/)寻找 kibana镜像。

2)寻找合适的Kibana版本,这里选择8.7.1版本,与es版本保持一致

3)通过Windows的PowerShell命令,下载docker镜像

docker pull kibana:8.7.1

4)查看镜像

docker images 

5)运行kibana(在PowerShell中执行时,需要把"/"移除)

docker run -d --name kibana \
        -e ELASTICSERACH_HOSTS=http://es:9200 \
        --network=es-net \
        -p 5601:5601 \
        kibana:8.7.1

6)运行参数详解

-d #容器后台运行
--name kibana 		#容器命名
-e ELASTICSERACH_HOSTS=http://es:9200  #设置es访问路径,因为es和kibana都部署在docker中,共享同一个es-net网络,所以可以通过容器名访问
--network es-net 	#执行容器运行网络
-p 5601:5601		#开放端口
kibana:8.7.1 		#运行镜像和tag

9)查看容器运行情况

docker ps

2、配置kibana认证 1)找到kibana配置文件。(文件绝对路径:/usr/share/kibana/config/kibana.yml)

2)修改kibana配置如下:

elasticsearch.username: "kibana"   		#不能配置elastic用户,否则kibana启动会提示权限过高
elasticsearch.password: "******"  		#配置密码,重置密码请看:2.6、重置用户密码
elasticsearch.hosts: ["http://es:9200"]	#es访问地址

3)重启kibana

4)登录kibana,http:localhost:5601/

四、安装IK分词器 1、下载IK分词器

https://github.com/medcl/elasticsearch-analysis-ik

这里选择最新版本v8.7.0下载,对应elasticsearch的v8.7.1。这里下载elasticsearch-analysis-ik-8.7.0.zip压缩包。

2、安装IK分词器 1)下载成功后,将elasticsearch-analysis-ik-8.7.0.zip解压放到数据卷目录es-plugins下。

2)重新启动es,系统提示"fatal exception while booting Elasticsearch",那是因为IK分词器中默认设置的版本与es的版本不一致

3)来到数据卷挂载目录,修改plugin-descriptor.properties配置文件的es版本信息,修改elasticsearch.version=8.7.1(本文es镜像版本为8.7.1),配置信息与es镜像版本一致。

4)使用docker desktop,重启es镜像,发现es镜像可以启动成功。

参考文献: 《龙叔学ES:Elasticsearch XPACK安全认证》

原文链接:blog.csdn.net/weixin_4430…

虽然日志显示 Elasticsearch 已经成功启动(状态为 GREEN),但你无法通过浏览器访问 http://localhost:9200,这通常是因为 Elasticsearch 8.x 版本默认开启了安全认证(SSL/TLS 和 密码验证) ,而浏览器默认尝试的是非加密的 HTTP 连接。

结合你提供的日志(显示 IP 为 172.17.240.1,这通常是 Docker 容器的网桥 IP)和常见情况,以下是导致无法访问的三个主要原因及解决方案:

1. 原因一:默认开启了 HTTPS(最常见)

Elasticsearch 8.0 以后,默认开启了 X-Pack 安全功能。如果你直接用 http:// 访问,服务端会拒绝连接,因为它期待的是 https:// 请求。

  • 现象:浏览器提示“连接被重置”或“无法访问此网站”。

  • 解决方法

    1. 在浏览器地址栏输入 https://localhost:9200(注意是 s)。
    2. 浏览器会提示“连接不安全”(因为使用的是自签名证书),点击“高级” -> “继续前往”。
    3. 此时你应该能看到一个登录框,或者返回一段 JSON 信息。

2. 原因二:需要账号密码认证

即使你成功通过 HTTPS 访问,Elasticsearch 也会要求输入用户名和密码。

  • 用户名:默认为 elastic

  • 密码:是在 Elasticsearch 第一次启动时自动生成并打印在控制台(或 Docker 日志)里的。

    • 如何找回密码

      • 如果你是用 Docker 启动的,请在终端执行:

        bash

        编辑

        docker logs <你的容器ID或名称> | grep "password"
        

        或者查看启动日志中类似 Elasticsearch password for elastic user is: <你的密码> 的一行。

      • 如果日志找不到了,你需要重置密码(见下文)。

3. 原因三:绑定地址限制(如果是 Docker 部署)

你的日志显示 publish_address {172.17.240.1:9200},这强烈暗示你是在 Docker 环境中运行。

  • 问题:Elasticsearch 默认可能只绑定在容器内部的 localhost,导致宿主机的浏览器无法访问。

  • 解决方法
    你需要修改 elasticsearch.yml 配置文件,添加或修改以下配置,允许外部访问:

    yaml

    编辑

    network.host: 0.0.0.0
    http.port: 9200
    # 如果是单节点运行,建议加上这个以避免集群发现报错
    discovery.type: single-node
    

    修改后需重启容器。


🛠️ 快速排查与修复步骤

如果你不想配置复杂的 HTTPS 证书,只是想快速在本地调通,可以按照以下步骤关闭安全验证(仅限开发环境):

方案 A:关闭安全认证(开发环境推荐)

  1. 找到 elasticsearch.yml 配置文件(Docker 中通常在 /usr/share/elasticsearch/config/)。

  2. 在文件末尾添加:

    yaml

    编辑

    xpack.security.enabled: false
    xpack.security.http.ssl.enabled: false
    
  3. 重启 Elasticsearch。

  4. 再次访问 http://localhost:9200,此时应该能直接看到 JSON 响应。

方案 B:保留安全认证(生产环境推荐)

  1. 确保使用 https://localhost:9200 访问。

  2. 如果忘记了 elastic 用户的密码,可以在容器中执行以下命令重置:

    bash

    编辑

    # 进入容器
    docker exec -it <容器ID> /bin/bash
    
    # 执行重置命令
    ./bin/elasticsearch-reset-password -u elastic -i
    # 输入两次新密码
    
  3. 使用新密码登录。

总结

你现在的服务是正常启动的。请尝试将浏览器地址改为 https://localhost:9200,并输入启动时生成的初始密码即可。